一、基础环境
1、操作系统:CentOS 7.6
2、Docker版本:https://download.docker.com/linux/static/stable/x86_64/docker-19.03.9.tgz
3、官方参考文档:https://docs.docker.com/install/linux/docker-ce/binaries/#install-static-binaries
二、Docker安装
1、下载
wget https://download.docker.com/linux/static/stable/x86_64/docker-19.03.8.tgz
2、解压
tar zxvf docker-19.03.8.tgz
3、将解压出来的docker文件内容移动到 /usr/bin/ 目录下
cp /docker/* /usr/bin/
#我在第一次操作的时候,将整个docker文件夹及目录下的文件移动到了 /usr/bin 下导致启动失败,需要注意,只要docker下的文件。。。
4、将docker注册为service
vi /etc/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
5、启动
chmod +x /etc/systemd/system/docker.service #添加文件权限并启动docker
systemctl daemon-reload #重新加载配置文件
systemctl start docker #启动Docker
systemctl enable docker.service #设置开机自启
6、验证
systemctl status docker #查看Docker状态
docker -v #查看Docker版本
7、重启系统。查看docker是否已经启动。
三、镜像的导出
1、查看服务器上下载的镜像
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 6678c7c2e56c 4 days ago 127MB
mariadb 10.4.12 a90e8f717676 2 weeks ago 356MB
tomcat 8.5.50 b56d8850aed5 4weeks ago 529MB
redis 3.2 87856cc39862 16months ago 76MB
2、导出相关镜像
docker save -o /home/mariadb10.4.12.tar.gz mariadb:10.4.12
说明: -o :输出到的文件 /home/mariadb10.4.12.tar.gz输出的路径及文件名。 mariadb:10.4.12:本地镜像仓库:TAG
执行完成后,将该文件上传到你要恢复镜像的服务器。
3、在恢复镜像的服务器进行导入
docker load < /home/mariadb10.4.12.tar.gz
docker load < /home/mariadb10.4.12.tar.gz
cc4590d6a718: Loading layer [======================>] 65.58MB/65.58MB 8c98131d2d1d: Loading layer
…………………………………………………………………………………………………………………………………………
28cf79891799: Loading layer [=================================>] 1.536kB/1.536kB
Loaded image: mariadb:10.4.12
查看导出的镜像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mariadb 10.4.12 a90e8f717676 2 weeks ago 356MB
4、利用恢复的镜像创建容器。
①新建一个临时容器
docker run -it -d --name mysqltest -v /docker/mysql:/var/lib/mysql -v /docker/mysql/logs:/var/log/mysql --restart=always -p 3310:3306 -e MYSQL_ROOT_PASSWORD=123456 mariadb:10.4.12
然后进入容器
docker exec -it mysqltest bash
tar zcvf /var/lib/mysql/my.cnf.tar.gz /etc/mysql/*
在容器内打包 /etc/mysql/* 到 /var/lib/mysql/my.cnf.tar.gz
②拷贝刚才打包的文件。
退出容器,cp /docker/mysql/my.cnf.tar.gz /docker/mysql/conf
#因为我们在第①步已经将容器内/var/lib/mysql映射到宿主机上的/docker/mysql目录,所以刚才在容器的打包的配置文件在 /docker/mysql目录内就存在了。
③ chmod 755 /docker/mysql/conf
④ 解压my.cnf.tar.gz
/docker/mysql/conf/tar zxvf my.cnf.tar.gz
⑤停止和删除刚才建立的临时容器
docker stop mysqltest #停止这个容器服务
docker rm mysqltest #删除这个容器
⑥创建容器
docker run -it -d --name mysql -v /docker/mysql/data:/var/lib/mysql -v /docker/mysql/conf/:/etc/mysql/conf.d -v /docker/mysql/logs:/var/log/mysql --restart=always -p 3310:3306 -e MYSQL_ROOT_PASSWORD=123456 mariadb:10.4.12
#注意这个地方
/docker/mysql/conf/:/etc/mysql/conf.d
之所以要将conf文件夹映射到/etc/mysql/conf.d下,是因为官方文档说:将含有.cnf文件结尾的文件夹映射到这个文件夹下后,在启动MySQL容器的时候,会自动使用我们的配置文件来替换原来的。文档地址:https://hub.docker.com/_/mariadb
查看刚才的容器。
docker ps
为了进行验证/docker/mysq/conf/my.cnf是否启动了配置作用。
可以将my.cnf配置进行相关的修改。我在测试的时候将port端口由默认3306修改为了3309
然后新建一个容器
docker run -it -d --name mysql -v /docker/mysql/data:/var/lib/mysql -v /docker/mysql/conf/:/etc/mysql/conf.d -v /docker/mysql/logs:/var/log/mysql --restart=always -p 3310:3309 -e MYSQL_ROOT_PASSWORD=123456 mariadb:10.4.12
然后用Navicat 进行连接测试。
或者是进入容器内部,查看端口是否启动是3309
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1、容器的导出镜像(启动容器后进行了相关更新,并以此为版本生成新的镜像)
docker commit 容器id 新镜像名称
docker commit 3f468ca79796 haproxy_keepalived:v1.1
2、根据刚才导出的新镜像生成新的容器
docker run -it -d -p 4001:8888 -p 4002:3306 -v /etc/haproxy:/usr/local/etc/haproxy --name h1 --privileged --net=net1 --ip 172.18.0.7 haproxy_keepalived:1.1
3、导出相关镜像并将该文件cp到其他机器
docker save -o /home/haproxy_keepalived:v1.1 haproxy_keepalived:v1.1
4、在恢复镜像的服务器进行导入
docker load < /home/haproxy_keepalived:v1.1
5、docker images 查看刚才导入的镜像
6、利用该镜像进行新的容器部署。
例如打印容器mytest应用后100行的内容。
docker logs --tail="300" 容器名称
查看指定时间后的日志,只显示最后100行:
$ docker logs -f -t --since="2018-02-08" --tail=100 CONTAINER_ID (容器id)
查看最近30分钟的日志:
docker logs --since 30m CONTAINER_ID
查看某时间段日志:
$ docker logs -t --since="2018-02-08T13:23:37" --until "2018-02-09T12:23:37" CONTAINER_ID