打包出来就相当于备份出来了
# 删除镜像 [root@docker01 ~]# docker image rm alpine:latest 正在用的镜像删不掉 [root@docker01 ~]# docker rmi centos:7 docker images|awk \'NR>1{print "docker rmi "$3}\'|bash docker rmi $(docker images|awk \'NR>1{print $3}\') docker rmi $(docker images -q) [root@docker01 ~]# docker save busybox:latest -o docker_busybox.tar.gz [root@docker01 ~]# scp -rp docker_busybox.tar.gz 10.0.0.6:/root [root@docker02 ~]# ll -rw------- 1 root root 1446400 Dec 30 09:54 docker_busybox.tar.gz # 导入镜像 [root@docker02 ~]# docker image load -i docker_busybox.tar.gz 195be5f8be1d: Loading layer 1.437MB/1.437MB Loaded image: busybox:latest [root@docker02 ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest 6d5fcfe5ff17 3 days ago 1.22MB 五、docker的容器管理 # 创建启动nginx 保持不退出-d [root@docker01 ~]# docker run -d -p 80:80 nginx:latest run(创建并运行一个容器) -d 放在后台 -p 端口映射 -v 源地址(宿主机):目标地址(容器) nginx docker镜像的名字 docker run = docker create + docker start # 进入容器 -it [root@docker01 ~]# docker run -it --name test nginx:latest /bin/bash root@0fd575413ecf:/# nginx -v nginx version: nginx/1.17.6 root@0fd575413ecf:/# 容器越小越好 所以什么容器就保留什么容器的命令 但是也会留一些简单命令 root@0fd575413ecf:/# hostname -I [容器ip] 172.17.0.2 root@docker01 ~]# ping 172.17.0.2 [宿主机可以ping通] PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data. 64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.061 ms 64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.037 ms # 停止容器 [root@docker01 ~]# docker container stop CONTAINER_ID # 杀死容器 [root@docker01 ~]# docker container kill container_name # 删除容器 [root@docker01 ~]# docker container rm id或name # 批量删除容器 [root@docker01 ~]# docker container rm -f `docker ps -a -q` # 查看容器列表 [root@docker01 ~]# docker container ls(-a -l -q)= docker ps 默认:显示起来的 -a:显示全部 -a -l:显示最后一个 -a -q:打印每个容器的id # 查看容器的详细信息 [root@docker01 ~]# docker inspect 容器ID # 进入正在运行的容器 (目的:调试排错) [root@docker01 ~]# docker exec -it # 进个容器 [root@docker01 ~]# docker run -it nginx:latest /bin/bash root@126b976a6b16:/# # 另个窗口看看状态 [root@docker01 ~]# docker ps -a -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 126b976a6b16 nginx:latest "/bin/bash" 33 seconds ago Up 32 seconds 80/tcp great_saha # 进入正在运行的容器 [root@docker01 ~]# docker attach 126b976a6b16(id号) 但是这个命令 有个bug 运行在同一个终端 两边会同步操作 (偷偷离开的快捷键ctrl+p松开手后ctrl+q) # 进入正在运行的容器 [root@docker01 ~]# docker exec -it 126b976a6b16 /bin/bash root@126b976a6b16:/# # 复制宿主机文件到容器里 [root@docker01 ~]# docker cp xiaoniao.zip 容器id 六、docker容器的网络访问(端口映射)通过iptables来实现的端口映射
1.为什么要做端口映射?因为容器用的是内网ip 外界访问只能访问到它的宿主机 所要在宿主机上做一个端口映射
nat模式
宿主机是一个网段 容器也是一个网段
[root@docker01 ~]# docker run -it centos:6.9 [root@d74e2af7db5a /]# ping 223.5.5.5 bash: ping: command not found [root@docker02 ~]# yum provides ping iputils [root@d74e2af7db5a /]# yum install iputils -y [root@d74e2af7db5a /]# ping 223.5.5.5 PING 223.5.5.5 (223.5.5.5) 56(84) bytes of data. 64 bytes from 223.5.5.5: icmp_seq=1 ttl=127 time=13.1 ms 64 bytes from 223.5.5.5: icmp_seq=2 ttl=127 time=8.20 ms # 每当启动docker时 内核转发参数自动变1 [root@docker01 ~]# sysctl -a|grep ipv4|grep forward net.ipv4.ip_forward = 1 2.端口映射1)-p hostPort:containerPort
[root@docker01 ~]# docker run -d -p 80:80 nginx:latest 178727ce6647cc2bebd20bc3c6ac361e6dba0e6531bb0736ff2cdf1b0f6efbbb [root@docker01 ~]# docker ps -a -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 178727ce6647 nginx:latest "nginx -g \'daemon of…" About a minute ago Up About a minute 0.0.0.0:80->80/tcp admiring_faraday杀死容器 网页连不上了
2)-p ip:hostPort:containerPort
多个容器同时使用8080端口
# 配置多个ip [root@docker01 ~]# ifconfig eth0:1 10.0.0.23/24 [root@docker01 ~]# ifconfig eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.0.23 netmask 255.255.255.0 broadcast 10.0.0.255 ether 00:0c:29:3e:b8:e2 txqueuelen 1000 (Ethernet) # 同时起了两个容器 [root@docker01 ~]# docker run -d -p 10.0.0.5:8080:80 nginx:latest 2c4ad02a62184b5bb6ed46a1471eb666cce821208780b3e839992c09d0fecf1f [root@docker01 ~]# docker run -d -p 10.0.0.23:8080:80 nginx:latest 993bdabc1f6823398d47da011b7af1ea8c6dfbe13208599285e7a354e543960b