# 5. 容器的管理 ## 5.1 运行第一个容器 ### 5.1.1 交互式的容器:(启动容器后,可以登录进去,操作。)-it -i:交互式 t:tty终端 [root@docker ~]# docker container run -it cf49811e3cdb ##也可以省略container,以前的版本docker run退出交互式容器,exit [root@docker /]# docker container ls ##查看运行的容器 docker ps
CONTAINER ID: 容器的唯一号码(自动生成的) NAMES ID: 容器的名字(可以自动,也可以手工指定,名称不能重复。)
![]()
docker container run -it --name="dfsc_c75" cf4 [root@docker /]# docker container ls -a STATUS : 容器的运行状态 (Exited , Up) docker rm $(docker ps -q -f status=exited) ##删除状态为退出的容器 ### 5.1.2 守护式容器,服务型的,长期开着,以进程方式,后台启动。 docker run -d --name="oldguo_nginx" nginx:1.14 ## -d : daemon nginx:1.14镜像名称 如果本地没有这个镜像,系统会去从网上把这个镜像拉取下来,再启动。
![]()
查询容器的详细信息: [root@docker /]# docker container inspect oldguo_nginx
![]()
### 5.1.3 交互式的容器: 工具类: 开发,测试,临时性的任务() 删除未释放的容器:(交互式容器,exit 了,并未完全被销毁。)
[root@docker /]# docker container run -it --name="dfsc_c75" --rm cf49811e3cdb
守护式容器: 网络服务 映射端口,将容器内的端口,映射到宿主机上面的端口。 docker container run -d -p 8080:80 --name="oldguo_nginx_80" nginx:1.14
![]()
### 5.1.4 容器的启动\关闭\连接 守护式容器的关闭和启动 docker container stop oldguo_nginx_80 docker container start oldguo_nginx_80 交互式的容器的关闭和启动 docker container stop nervous_allen # 温柔的停止,比kill 好,不会损坏数据。 docker container start -i nervous_allen[容器名称或者容器ID] 容器的连接方法: [root@docker /]# docker container attach nervous_allen ##把后台的容器拉回来 交互式容器,用start 启动后,会把这个容器放在后台,这时用 attach 参数 ,可以进入到容器bash 但是用attach 进入到容器,当退出的时候,这个容器也down 了。 docker container attach 6d50415f0bd7
子进程的方式登录(在已有工作容器中生成子进程,做登录,可以进行容器的调试,退出时也不会影响到当前容器) docker container exec -it nervous_allen /bin/bash ## nervous_allen 容器名称 删除所有正在运行的容器: docker container rm -f `docker container ls -q` 删除所有容器,包括已经down的容器: docker container rm -f `docker container ls -aq`
容器的后台及前台运行: 容器启动时,必须有一个程序在运行,如果这个运行的程序结束了,容器也就down了。
1. ctrl + P, Q 从容器中的容器,退出在宿主机的shell attach 调用到前台
2. 死循环(启动一个容器,运行一个程序,一直运行。)## 基本不用这种方法 3. 让程序前台一直运行(在前台),使用场景:制作守护式容器时,常用的方法。 docker ps --no-trunc ## 把遮住的内容,完全显示。
## 5.2 docker容器的网络访问 指定映射(docker 会自动添加一条iptables规则来实现端口映射) -p hostPort:containerPort # 宿主机端口:容器端口 -p ip:hostPort:containerPort # ip:宿主机端口:容器端口 -p ip::containerPort(随机端口: 32768-60999) -p hostPort:containerPort/udp ##默认是TCP -p 81:80 -p 443:443 docker container run -d -p 8080:80 --name='n1' nginx:1.14 ## 启动容器的时候就进行映射
映射到宿主机上所有的IP: docker container run -d -p 8080:80 --name='n2' nginx:1.14 映射到宿主机上某个IP: docker container run -d -p 192.168.68.201:8081:80 --name='n7' nginx:1.14 映射到宿主机所有IP的随机端口:从32768开始----60999 docker container run -d -p 80 --name='n8' nginx:1.14 映射到宿主机上某个IP 的随机端口: docker container run -d -p 192.168.68.201::80 --name='n9' nginx:1.14 多个端口映射: docker container run -d -p 8080:80 -p 3306:3306 -p 2222:22 --name='n10' nginx:1.14 ## 5.3 容器的其他管理 docker ps -a -q等价于:docker container ls -a -q 查看docker 容器 里面的进程: docker top ba9143bcaf74等价于: docker container top ba9143bcaf74 docker logs 56e0618b91f5 ### 镜像名称也可以,也可以是镜像ID
docker container logs -f 56e0618b91f5
docker container logs -t 56e0618b91f5
## 只查看最后多少行 docker logs -tf --tail 10 56e0618b91f5 ## 5.4 docker的 数据卷 实现持久化存储 启动一个可以提供服务的容器: docker run -d --name='n1' -p 80:80 nginx 手工交互数据 拷贝宿主机上面的文件到容器: docker container cp /opt/index.html n1:/usr/share/nginx/html/
拷贝容器中的文件到本地: docker container cp n1:/usr/share/nginx/html/50x.html ./ Volume实现宿主机和容器的数据共享 mkdir -p /opt/html echo "<h1> wwww----->test....website </h1>" >/opt/html/index.html 在容器启动时,加 -v 做,宿主机目录 和 容器中的目录,做映射。 docker run -d --name="n2" -p 82:80 -v /opt/html:/usr/share/nginx/html nginx
数据卷作用: 数据持久化 3. 例子: 开启两个nginx容器(90,91),共同挂载一个数据卷,实现静态资源共享 mkdir -p /op/html echo "<h1> wwww----->test....volume </h1>" /opt/index.html docker container run -d -p 90:80 --name='nginx_v1' -v /opt/html:/usr/share/nginx/html nginx docker container run -d -p 91:80 --name='nginx_v2' -v /opt/html:/usr/share/nginx/html nginx
![]()
docker container inspect n2 ##查看 容器的数据卷信息 docker container inspect n2|grep "Source"
![]()
4. 数据卷容器:(多个容器挂载 多个数据卷),简化多次输入 -v 后面一长串 (1) 宿主机模拟数据目录 mkdir -p /opt/Volume/a mkdir -p /opt/Volume/b touch /opt/Volume/a/a.txt touch /opt/Volume/b/b.txt (2) 生成数据卷容器(可以理解为一个中间层,负责管理所有数据卷。) docker run -it --name "httpd_volumes" -v /opt/Volume/a:/opt/a -v /opt/Volume/b:/opt/b centos:6.9 /bin/bash ctrl + pq ## 把容器放在后台
(3) 使用数据卷容器 docker run -d -p 8085:80 --volumes-from httpd_volumes --name "n8085" nginx docker run -d -p 8086:80 --volumes-from httpd_volumes --name "n8086" nginx 作用: 在集中化管理的集群中,大批量的容器都需要挂载相同的多个数据卷时,可以采用数据卷容器进行统一管理 +++++++++++++++++++++++++++++++++++++