.
https://www.cnblogs.com/liuxiaoji/p/11014329.html 轉載自並進行了版本更新
一、基礎環境
1、操作系統:CentOS 7.6
二、Docker安裝
1、下載
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