云计算之 docker 01 基础操作02

# 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

作用: 在集中化管理的集群中,大批量的容器都需要挂载相同的多个数据卷时,可以采用数据卷容器进行统一管理
+++++++++++++++++++++++++++++++++++++