Docker

2019-10-12 Views

关于Docker的一些笔记

安装

yum -y install docker #centOs

apt-get install -y docker.io #ubuntu

systemctl start docker #启动 Docker 后台服务

docker --version #查看版本,安装成功
Docker version 1.13.1, build 94f4240/1.13.1

加速器

  • 用的是DaoCloud的加速器,进入控制台的加速器

  • 复制代码到本地运行,即可将registry-mirror加入到Docker 配置文件 /etc/docker/daemon.json 中

    curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://010e8490.m.daocloud.io #运行复制的命令
    docker version >= 1.12
    {"registry-mirrors": ["http://010e8490.m.daocloud.io"],}
    Success.
    You need to restart docker to take effect: sudo systemctl restart docker
    
    sudo systemctl restart docker #重启docker
    

查看挂载情况

docker inspect container_name | grep Mounts -A 20
"Mounts": [
            {
                "Type": "bind",
                "Source": "/var/lib/mysql",
                "Destination": "/run/media/wade/archive/data",
                "Mode": "rw",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "volume",
                "Name": "24ec79325c0fb26df06bb277194e487ebe8ea6c58225571296a0b8dd5474f466",
                "Source": "/var/lib/docker/volumes/24ec79325c0fb26df06bb277194e487ebe8ea6c58225571296a0b8dd5474f466/_data",
                "Destination": "/var/lib/mysql",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
        "Config": {

安装mysql

docker search mysql #查找mysql官方镜像

docker pull mysql:5.6 #拉取镜像mysql5.6版本

docker images #查看本地镜像
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/mysql     5.6                 5f5ccdc8aedc        7 weeks ago         256 MB

sudo docker run --name siot-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=H9si0711 -v /run/media/wade/archive/master/etc/mysql:/ee/master/etc/mysql/my.cnf:/etc/mysql/my.cnf -v /run/media/wade/archive/master/data:/var/lib/mysql -d master/mysql #创建mysql容器, --name 容器名称 -v 挂载文件 /宿主机文件路径:/容器内文件路
ca5dd632677a144e647b410dee29d96dc029352c614ab560fa22bfa614f09b7c

docker exec -it test-mysql bash #进入mysql容器

mysql -uroot -p123456 #启用mysql窗口,进入命令行

status; #查看mysql状态信息
--------------
mysql  Ver 14.14 Distrib 5.6.40, for Linux (x86_64) using  EditLine wrapper

Connection id:		1
Current database:	
Current user:		root@localhost
SSL:			Not in use
Current pager:		stdout
Using outfile:		''
Using delimiter:	;
Server version:		5.6.40 MySQL Community Server (GPL)
Protocol version:	10
Connection:		Localhost via UNIX socket
Server characterset:	latin1
Db     characterset:	latin1
Client characterset:	latin1
Conn.  characterset:	latin1
UNIX socket:		/var/run/mysqld/mysqld.sock
Uptime:			1 min 57 sec

Threads: 1  Questions: 5  Slow queries: 0  Opens: 67  Flush tables: 1  Open tables: 60  Queries per second avg: 0.042
--------------

quit; #退出mysql

按住ctrl,再按p,再按q退出mysql容器

使用Dockerfile构建镜像

mkdir siot

cd siot

vi my.cnf #编辑mysql的配置文件,这里只是指定了数据的存储路径
[mysqld]
datadir=/var/lib/mysql
#############################

vi Dockerfile
FROM mysql:5.6 #指定基础镜像

COPY my.cnf /etc/mysql/ #将刚才编辑的配置文件拷贝到将要运行的容器中,<源路径>  <目标路径>

EXPOSE 3306 #声明端口

CMD ["mysqld"]
#############################

docker build -t siot/mysql . #不要忘记最后的“.”


配置网络代理

mkdir -p /etc/systemd/system/docker.service.d # 为docker服务创建一个内嵌的systemd目录

vi /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://[proxy-addr]:[proxy-port]/" "HTTPS_PROXY=https://[proxy-addr]:[proxy-port]/" "NO_PROXY=localhost,127.0.0.1,docker-registry.somecorporation.com"

systemctl daemon-reload

systemctl restart docker

systemctl show docker --property Environment # 检查变量是否加载
Environment=HTTP_PROXY=http://172.18.29.121:3128/ HTTPS_PROXY=https://172.18.29.121:3128/ NO_PROXY=localhost,127.0.0.1,172.18.*.*,*.aliyuncs.com,mirrors.cloud.aliyuncs.com

# 取消代理
rm -rf /etc/systemd/system/docker.service.d/http-proxy.conf
systemctl daemon-reload
systemctl restart docker
systemctl show docker --property Environment

设置开机自启

docker update --restart=always 容器名称或ID

问题&解决

挂载宿主机已存在目录后,在容器内对其进行操作,报“Permission denied”

  • 关闭selinux
setenforce 0 #临时关闭

vi /etc/sysconfig/selinux #永久关闭
SELINUX=disabled
  • 以特权方式启动容器
docker run -it --privileged=true -v /test:/soft centos /bin/bash #指定--privileged参数

启动容器时报错:Error response from daemon: error creating overlay mount to /var/lib/docker/overlay2

  • 这是因为用的overlay2文件系统,而系统默认只能识别overlay文件系统
systemctl stop docker #停掉docker服务

rm -rf /var/lib/docker #注意会清掉docker images的镜像

vi /etc/sysconfig/docker-storage #将文件里的overlay2改成overlay即可

vi /etc/sysconfig/docker #去掉option后面的--selinux-enabled

systemctl start docker #启动deocker即可

△