Docker - 01 - 入门啊

1. Docker介绍

1.1 什么是容器?

1.2 容器的前世

FreeBASE jail ——> Linux vserver
chroot —–> 完整的根文件系统(FHS)标准的
namespaces —> UTS Mount IPC PID user network
cgroup —> 资源的分配和监控

通过比较复杂的代码开发的过程,调用以上三项技术
实现容器的创建 —-> 管理 —->销毁

1.3 传统虚拟化技术和容器对比

1.4 容器的今生?

实现隔离能力!
LXC (LinuXContainer)
对于原有的常用功能进行了封装,方便我们做容器的生命周期
—–> Docker (dotcloud)

1.5 Docker 帮助文档

https://docs.docker.com/engine/reference/commandline/cli/?spm=5176.8351553.0.0.248a1991nVGS9m

2. Docker的安装

2.0、yum源准备

1
2
3
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

2.1 安装依赖包

1
2
yum install -y yum-utils device-mapper-persistent-data lvm2
yum list docker-ce.x86_64 --showduplicates | sort -r

yum install -y docker-ce

2.2 安装docker-ce

1
2
3
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

2.3 启动Docker服务

1
2
3
4
systemctl daemon-reload
systemctl restart docker
docker version
docker info

2.4 配置镜像加速

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
阿里云Docker-hub
https://cr.console.aliyun.com/cn-hangzhou/mirrors

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://uoggbpok.mirror.aliyuncs.com"]
}
EOF

systemctl daemon-reload
systemctl restart docker

或者:
vim /etc/docker/daemon.json

{
"registry-mirrors": ["https://68rmyzg7.mirror.aliyuncs.com"]
}

#3. Doocker体系结构

image.png

4. Docker的镜像基础管理

4.1 获取镜像

1
2
3
4
5
6
基础镜像拉取
docker search centos
docker pull centos:6.9
docker pull centos:7.5.1804
docker pull docker.io/golang
docker pull nginx

4.2 镜像基本查看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@docker ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 6.8 82f3b5f3c58f 4 months ago 195 MB
centos 6.9 2199b8eb8390 4 months ago 195 MB
centos 7.5.1804 cf49811e3cdb 4 months ago 200 MB
centos 7.6.1810 f1cb7c7d58b7 4 months ago 202 MB
oldguo/centos_sshd v1.0
oldguo/centos_sshd v2.0
oldguo/centos_sshd v3.0
标识镜像唯一性的方法:
1. REPOSITORY:TAG
centos:7.5.1804
2. IMAGE ID (sha256:64位的号码,默认只截取12位)
82f3b5f3c58
[root@docker /]# docker image ls --no-trunc

4.3 镜像详细信息查看

1
2
[root@docker /]# docker image inspect ubuntu:latest
[root@docker /]# docker image inspect 82f3b5f3c58f

4.4 只查看镜像ID

1
[root@docker ~]# docker image ls -q

4.5 镜像的导入和导出

1
2
3
4
[root@docker ~]# docker image save 3556258649b2 >/tmp/ubu.tar
[root@docker ~]# docker image rm 3556258649b2
[root@docker ~]# docker image load -i /tmp/ubu.tar
[root@docker ~]# docker image tag 3556258649b2 oldguo/ubu:v1

4.6 镜像的删除

1
2
[root@docker ~]# docker image rm -f 3556258649b2
[root@docker ~]# docker image rm -f `docker image ls -q`

5. 容器的管理

5.1 运行第一个容器

5.1.1 交互式的容器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@docker ~]# docker container run -it  9f38484d220f
[root@docker /]# docker container ls
[root@docker /]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4d1ef5a6ecfc 9f38484d220f "/bin/bash" 5 minutes ago Up 5 minutes nervous_alle

CONTAINER ID : 容器的唯一号码(自动生成的)
NAMES : 容器的名字(可以自动,也可以手工指定)
例子: 手工指定容器名启动
[root@docker /]# docker container run -it --name="oldguo_cent76" 9f38484d220f
[root@docker /]# docker container ls -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 守护式容器

1
2
3
4
[root@docker /]# docker run -d --name="oldguo_nginx" nginx:1.14
查询容器的详细信息:
[root@docker /]# docker container inspect oldguo_nginx
[root@zzuxyj7 ~]#curl -I 172.17.0.2

5.1.3 容器的应用场景

1
2
3
4
交互式的容器: 工具类: 开发,测试,临时性的任务()
[root@docker ~]# docker container run -it --name="oldguo_cent76" --rm 9f38484d220f
守护式容器: 网络服务
[root@docker /]# docker run -d -p 8080:80 --name="oldguo_nginx_80" nginx:1.14

5.1.4 容器的启动\关闭\连接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
守护式容器的关闭和启动
[root@docker /]# docker container stop oldguo_nginx_80
[root@docker /]# docker container start oldguo_nginx_80

交互式的容器的关闭和启动
[root@docker /]# docker container stop nervous_allen
[root@docker /]# docker container start -i nervous_allen

容器的连接方法:
[root@docker /]# docker container attach nervous_allen

子进程的方式登录(在已有工作容器中生成子进程,做登录.可以用于进行容器的调试,退出时也不会影响到当前容器)
[root@docker ~]# docker container exec -it nervous_allen /bin/bash

容器的后台及前台运行:
1. ctrl + P, Q
attach 调用到前台
2. 死循环
3. 让程序前台一直允许(夯在前台)
制作守护式容器时,常用的方法

5.2 docker容器的网络访问

1
2
3
4
5
6
7
8
9
10
11
12
13
指定映射(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(随机端口)
[root@docker ~]# docker container run -d -p 8080:80 --name='n2' nginx:1.14 *****
[root@docker ~]# docker container run -d -p 10.0.0.100:8081:80 --name='n3' nginx:1.14 *****
[root@docker ~]# docker container run -d -p 80 --name='n5' nginx:1.14
[root@docker ~]# docker container run -d -p 172.16.1.200::80 --name='n6' nginx:1.14

5.3容器的其他管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
docker ps -a  -q 
等价于:
docker container ls -a -q
[root@docker ~]# docker top ba9143bcaf74
等价于:
[root@docker ~]# docker container top ba9143bcaf74
查看日志:
[root@oldboy docker]# docker logs testxx
[root@oldboy docker]# docker logs -tf testxx

[root@oldboy docker]# docker logs -t testxx
[root@oldboy docker]# docker logs -tf --tail 10 testxx
[root@oldboy docker]# 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
1. 手工交互数据:
[root@docker opt]# docker container cp index.html n1:/usr/share/nginx/html/
[root@docker opt]# docker container cp n1:/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. [root@docker ~]# yum install lftpd

    [root@docker ~]# lftp 127.0.0.1//测试ftp安装是否成功

  4. 上传系统进行到虚拟机
    略.

  1. 配置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/var/www/html/ftp
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

搭建本地的yum仓库,并通过vsftpd 和 httpd 共享该目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

yum install httpd vsftpd lftp -y //安装三个服务

mount -o loop /centos6.5.iso /var/www/html/ftp/centos6.5 //注意路径,挂在对应的iso到对应目录下

systemctl start httpd vsftpd //启动服务

systemctl enable httpd vsftpd //开机自启动

systemctl disable firewalld //关闭防火墙开机自启动

systemctl stop firewalld //关闭防火墙

systemctl status firewalld //查看防火墙状态

  • 通过上面的服务搭建以及配置接下来可以进行yum仓库的配置,由于搭建镜像的本地服务中,镜像挂在点有repodata/及其配置文件,此时可以不用配置repomd.xml等,可以省略。若搭建其他需要通过下述命令进行配置
1
2
3
4
yum install  createrepo -y //安装createrepo ,用于构建repodata

createrepo /var/www/html/ftp //此时就会该目录下生成repodata/

根据yum仓库的配置文件创建一个本地的repo文件

要记得修改vsftpd的默认路径

1
2
3
local_root=/var/www/html
chroot_local_user=YES
anon_root=/var/www/html
1
2
3
4
5
6
7
cat >/yum.repos.d/ftp_6.repo <<EOF 
[ftp]
name=ftpbase
baseurl=ftp://192.168.100.4/var/www/html/ftp
enabled=1
gpgcheck=0
EOF

通过浏览器访问测试

ftp://192.168.100.4/

1

http://192.168.100.4/ftp/

2

  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

请我喝杯咖啡吧~

支付宝
微信