# 1. Docker的安装
## 1.0、yum源准备
```
可以通过官网安装
yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine sudo yum install -y yum-utils yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo yum install docker-ce docker-ce-cli containerd.io -y
curl http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
```
## 1.1 安装依赖包
```
yum install -y yum-utils device-mapper-persistent-data lvm2
yum list docker-ce.x86_64 --showduplicates | sort -r
```
yum install -y docker-ce
## 1.2 安装docker-ce
yum install -y --setopt=obsoletes=0 \
docker-ce-17.03.2.ce-1.el7.centos.x86_64 \
docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch
## 1.3 启动Docker服务
systemctl daemon-reload
systemctl restart docker
# 4. Docker的镜像基础管理
## 4.1 获取镜像
```
基础镜像拉取
docker search centos 查询镜像
docker pull centos:6.9 下载镜像
docker pull centos:7.5.1804
docker pull nginx
```
## 4.2 镜像基本查看
```
docker image ls 或者 docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 6.9 2199b8eb8390 4 months ago 195 MB
centos 7.5.1804 cf49811e3cdb 4 months ago 200 MB
标识镜像唯一性的方法:
1. REPOSITORY:TAG
centos:7.5.1804
2. IMAGE ID (sha256:64位的号码,默认只截取12位)
82f3b5f3c58
docker image ls --no-trunc 查看完整IMAGE ID
```
## 4.3 镜像详细信息查看
```
docker image inspect ubuntu:latest
docker image inspect 82f3b5f3c58f
```
## 4.4 只查看镜像ID
```
docker image ls -q
```
## 4.5 镜像的导入和导出
```
docker image save 3556258649b2 >/tmp/ubu.tar 导出到本地
docker image load -i /tmp/ubu.tar 导入本地镜像
docker image tag 3556258649b2 oldguo/ubu:v1 添加标签
docker export -o "my_nginx.tar" 2ccd9d92501d 导出容器到文件
docker import --message "commit my nginx" my_nginx.tar my_nginx:1.0.0 导入文件成镜像
```
## 4.6 镜像的删除
```
docker image rm -f 3556258649b2 删除指定镜像
docker rmi 3556258649b2 删除指定镜像
docker image rm -f `docker image ls -q` 全部删除
删除指定的image
docker rmi `docker images |awk '/^<none>/{print$3}'`
```
# 5. 容器的管理
## 5.1 运行第一个容器
### 5.1.1 交互式的容器:
```
-it 是交互式
docker container run -it 9f38484d220f container可省略
docker container ls 查看所有容器
docker ps -a 查看所有容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4d1ef5a6ecfc 9f38484d220f "/bin/bash" 5 minutes ago Up 5 minutes nervous_alle
CONTAINER ID : 容器的唯一号码(自动生成的)
NAMES : 容器的名字(可以自动,也可以手工指定)
例子: 手工指定容器名启动
docker run -it --name="oldguo_cent76" 9f38484d220f
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ef45b19d8c7b 9f38484d220f "/bin/bash" About a minute ago Exited (0) 5 seconds ago oldguo_cent76
4d1ef5a6ecfc 9f38484d220f "/bin/bash" 9 minutes ago Up 9 minutes nervous_allen
STATUS : 容器的运行状态 ( Exited , Up)
```
### 5.1.2 守护式容器
```
-d 后台运行
docker run -d --name="oldguo_nginx" nginx:1.14
查询容器的详细信息:
docker inspect oldguo_nginx
```
### 5.1.3 容器的应用场景
```
交互式的容器: 工具类: 开发,测试,临时性的任务()
docker run -it --name="oldguo_cent76" --rm 9f38484d220f
守护式容器: 网络服务
docker run -d -p 8080:80 --name="oldguo_nginx_80" nginx:1.14
```
### 5.1.4 容器的启动\关闭\连接
```
守护式容器的关闭和启动
docker stop oldguo_nginx_80
docker start oldguo_nginx_80
交互式的容器的关闭和启动
[root@docker /]# docker stop nervous_allen
[root@docker /]# docker start -i nervous_allen
容器的连接方法:
docker attach nervous_allen (不常用退出后容器也会退出)
子进程的方式登录(在已有工作容器中生成子进程,做登录.可以用于进行容器的调试,退出时也不会影响到当前容器)
docker exec -it nervous_allen /bin/bash (常用)
容器的后台及前台运行:
1. ctrl + P, Q
attach 调用到前台
2. 死循环
3. 让程序前台一直允许(夯在前台)
制作守护式容器时,常用的方法
```
## 5.2 docker容器的网络访问
```
指定映射(docker 会自动添加一条iptables规则来实现端口映射)
-p hostPort:containerPort
-p ip:hostPort:containerPort
-p ip::containerPort(随机端口:32768-60999)
-p hostPort:containerPort/udp
-p 81:80 –p 443:443
随机映射
docker run -P 80(随机端口)
docker container run -d -p 8080:80 --name='n2' nginx:1.14 *****
docker container run -d -p 10.0.0.100:8081:80 --name='n3' nginx:1.14 *****
docker container run -d -p 80 --name='n5' nginx:1.14
docker container run -d -p 172.16.1.200::80 --name='n6' nginx:1.14
```
## 5.3容器的其他管理
```
docker ps -a -q
等价于:
docker container ls -a -q
docker top ba9143bcaf74
等价于:
docker container top ba9143bcaf74
查看日志:
docker logs testxx
docker logs -tf testxx
docker logs -t testxx
docker logs -tf --tail 10 testxx
docker logs -tf --tail 0 testxx
```
小结:
1. 镜像类:
docker image
search
pull
ls *****
inspect *****
rm ****
save
load
2. 容器类
docker container
run *****
start ****
stop ****
restart
kill
attach
exec *****
ls *****
top ****
logs
inspect ****
## 5.4 docker的数据卷实现持久化存储
```
1. 手工交互数据:
[root@docker opt]# docker container cp index.html nginx_web:/usr/share/nginx/html/
[root@docker opt]# docker container cp nginx_web:/usr/share/nginx/html/50x.html ./
2. Volume实现宿主机和容器的数据共享
[root@docker opt]# mkdir -p /opt/html
[root@docker ~]# docker run -d --name="nginx_3" -p 83:80 -v /opt/html:/usr/share/nginx/html nginx
作用: 数据持久化
3. 例子: 开启两个nginx容器(90,91),共同挂载一个数据卷,实现静态资源共享
4. 数据卷容器:
(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 "nginx_volumes" -v /opt/Volume/a:/opt/a -v /opt/Volume/b:/opt/b centos:6.9 /bin/bash
ctrl p q
(3)使用数据卷容器
docker run -d -p 8085:80 --volumes-from nginx_volumes --name "n8085" nginx
docker run -d -p 8086:80 --volumes-from nginx_volumes --name "n8086" nginx
作用: 在集中管理集群中,大批量的容器都需要挂载相同的多个数据卷时,可以采用数卷容器进行统一管理
```
制作本地局域网yum源
1. 安装vsftpd软件
[root@docker ~]# yum install -y vsftpd
2. 启动ftp
[root@docker ~]# systemctl enable vsftpd
[root@docker ~]# systemctl start vsftpd
3. 上传系统进行到虚拟机
略.
4. 配置yum仓库
mkdir -p /var/ftp/centos6.9
mkdir -p /var/ftp/centos7.5
[root@docker mnt]# mount -o loop /mnt/CentOS-6.9-x86_64-bin-DVD1.iso /var/ftp/centos6.9/
windows验证
ftp://10.0.0.100/centos6.9/
cat >/yum.repos.d/ftp_6.repo <<EOF
[ftp]
name=ftpbase
baseurl=ftp://10.0.0.100/centos6.9
enabled=1
gpgcheck=0
EOF
cat >/yum.repos.d/ftp_7.repo <<EOF
[ftp]
name=ftpbase
baseurl=ftp://10.0.0.100/centos7.5
enabled=1
gpgcheck=0
EOF