文章目录

  • 一.Docker介绍
  • 1.容器的介绍及作用
  • 1.1 docker的提出
  • 1.2 dockers的简介
  • 二.Docker的安装部署
  • 1.docker的安装
  • 2.配置镜像加速
  • 3. Docker体系结构
  • 三.Docker的镜像基础管理
  • 1.获取镜像
  • 2.镜像基本查看
  • 3.镜像详细信息查看
  • 4.只查看镜像ID
  • 5.镜像的导入和导出
  • 6.镜像的删除
  • 四.容器的管理
  • 1.运行第一个容器
  • 1.1 交互式的容器:
  • 1.2 守护式容器
  • 1.3 容器的类型
  • 1.4 容器的启动\关闭\连接
  • 2.docker容器的网络访问
  • 3.容器的其他管理
  • 五.docker的数据卷实现持久化存储
  • 1.环境准备
  • 2.手工交互数据
  • 3.Volume实现宿主机和容器的数据共享
  • 4.数据卷容器:
  • 六.制作本地局域网yum源
  • 1.配置
  • 2.访问


一.Docker介绍

1.容器的介绍及作用

1.1 docker的提出

1.容器技术最早出现在FreeBSD上叫做 jail,将一个进程放入jail中运行,不管这个进程在其中发生怎样的错误都不会影响到系统上其他进程的运行。后来,jail技术在Linux中的实现叫做vserver,vserver所实现的功能体现为chroot以及namespaces实现资源的隔离, 容器技术出现的主要目的是为了"资源隔离"
2.LXC,将原来需要手工编码实现的容器技术,进行了封装。实现了,更加方便、快速的容器创建及管理的技术。通过固有“模板”,安装并启动容器。将远程的程序包下载到本地,安装并创建好我们需要的容器。
确实,LXC已经很大程度上降低了容器管理的难度,但是依然使用一些弊端。有些时候可能需要自定制模板,以及使用LXC中自带的模板,以及大规模创建及复制依然比较麻烦。所以,很难大规模的应用。
3.所以,出现了Docker技术。Docker是在LXC基础上,使用GoLang二次开发的封装版。

1.2 dockers的简介

Docker 是 Docker.Inc 公司开源的一个基于 LXC技术之上构建的Container容器引擎, 源代码托管在 GitHub 上, 基于Go语言并遵从Apache2.0协议开源。
Docker是通过内核虚拟化技术(namespaces及cgroups等)来提供容器的资源隔离与安全保障等。由于Docker通过操作系统层的虚拟化实现隔离,所以Docker容器在运行时,不需要类似虚拟机(VM)额外的操作系统开销,提高资源利用率。

二.Docker的安装部署

1.docker的安装

1.安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
2.yum源准备
wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
yum makecache fast
3.安装docker-ce
yum install docker-ce
4.启动docker服务
systemctl start docker

2.配置镜像加速

使得下载镜像更加快速

阿里云Docker-hub
https://cr.console.aliyum.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

3. Docker体系结构

容器gui 容器管理技术_nginx

三.Docker的镜像基础管理

1.获取镜像

镜像查询:
docker search centos 
镜像下载:
docker pull centos:6.9
docker pull centos:7.5.1804
docker pull nginx

2.镜像基本查看

[root@docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              0901fa9da894        3 days ago          132MB
centos              6.9                 2199b8eb8390        16 months ago       195MB
centos              7.5.1804            cf49811e3cdb        16 months ago       200MB
标识镜像唯一性的方法
1. REPOSITORY:TAG(REPOSITORY	:镜像名,有2种,一种是官方的,一种是别人写好推上去github的   TAG:标识版本)
centos7.5.1804
2.IMAGE ID (SHA256:64位的号码,默认只截取12位)

3.镜像详细信息查看

[root@docker /]# docker image inspect centos:6.9(REPOSITORY:TAG)
[root@docker /]# docker image inspect 2199b8eb8390(IMAGE ID)

4.只查看镜像ID

[root@docker /]# docker image ls -q

5.镜像的导入和导出

[root@docker ~]# docker image save 2199b8eb8390 >/tmp/centos.tar(导出)
[root@docker ~]# docker image rm 2199b8eb8390 
[root@docker ~]# docker image load -i /tmp/centos.tar (导入)
[root@docker ~]# docker image tag 2199b8eb8390 lbz/centos:v1(打标签)
[root@docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              0901fa9da894        3 days ago          132MB
lbz/centos          v1                  2199b8eb8390        16 months ago       195MB
centos              7.5.1804            cf49811e3cdb        16 months ago       200MB

6.镜像的删除

删除某个镜像
[root@docker ~]# docker image rm -f 2199b8eb8390
删除所有镜像
[root@docker ~]# docker image rm -f `docker image ls -q`
查看:
[root@docker ~]# docker images   为空

四.容器的管理

1.运行第一个容器

1.1 交互式的容器:

[root@docker ~]# docker pull centos:6.9
[root@docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              6.9                 2199b8eb8390        16 months ago       195MB
[root@docker ~]# docker container run -it  2199b8eb8390 (此数字为镜像名)(-i交互式启动 -t开一个终端)      #进入一个容器并启动
[root@docker ~]#  docker container run -it  2199b8eb8390
[root@451dc436f99a /]#             #进入容器了
[root@docker ~]# docker container ls   ---查看正在运行的容器信息
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS         NAMES
451dc436f99a        2199b8eb8390        "/bin/bash"         17 seconds ago      Up 16 seconds         lucid_herschel(容器启动的随机名字)

CONTAINER ID: 容器的唯一号码(自动生成的)
NAMES 	  ID: 容器的名字(可以自动,也可以手工指定)
[root@docker ~]# docker container run -it --name='lbz_cent69'(手工指定的容器名字) 2199b8eb8390(镜像名)

[root@docker ~]# docker container ls -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                       PORTS               NAMES
00b8ece2aa21        2199b8eb8390        "/bin/bash"         24 seconds ago      Up 23 seconds                  lbz_cent69
STATUS      : 容器的运行状态 (Exited , Up)

[root@docker ~]#exit  ---退出容器

1.2 守护式容器

[root@docker ~]# docker pull nginx
[root@docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              0901fa9da894        3 days ago          132MB
centos              6.9                 2199b8eb8390        16 months ago       195MB

[root@docker ~]# docker run -d --name="lbz_nginx" nginx:latest  (-d使容器一直运行下去,不退出)
查询容器的详细信息:
[root@docker ~]# docker container inspect lbz_nginx(可以查询到容器的ip地址)
访问:
[root@docker ~]#curl -I 172.17.0.2(docker容器的地址)

1.3 容器的类型

[root@docker ~]# docker pull centos:7.5.1804
[root@docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              0901fa9da894        3 days ago          132MB
centos              6.9                 2199b8eb8390        16 months ago       195MB
centos              7.5.1804            cf49811e3cdb        16 months ago       200MB

交互式的容器: 工具类: 开发,测试,临时性的任务()
[root@docker ~]# docker container run -it --name="lbz_cent75" --rm cf49811e3cdb(当容器退出时会自动被删除掉)
守护式容器: 网络服务
[root@docker ~]# docker container run -d -p 8080:80 --name="lbz_nginx_80" nginx:latest (-p提供端口对外提供服务)

在物理机访问:10.0.0.200:8080(能够访问)相当于访问宿主机的8080端口就是访问docker的80端口

容器gui 容器管理技术_html_02

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

守护式容器的关闭和启动
[root@docker ~]# docker container stop lbz_nginx_80(容器名)
[root@docker ~]# docker container start lbz_nginx_80

交互式的容器的关闭和启动
[root@docker ~]# docker container stop nervous_allen(容器名)
[root@docker ~]# docker container start -i nervous_allen(-i为交互形式)

容器的连接方法:(登陆到已存在的容器当中)
[root@docker ~]# docker container attach nervous_allen

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

总结:

让容器永生的方法:(即不手动关闭容器就不会宕掉)
1. 进入容器后按ctrl + P, Q,可以使容器一直运行,而不会中断,不然的话退出容器就会断了,应用时再用attach 调用到前台
2. 起容器时用死循环  sleep+时间
3. 让程序前台一直运行(夯在前台)  -d
制作守护式容器时,常用的方法

2.docker容器的网络访问

指定映射(docker 会自动添加一条iotables规则来实现端口映射)
	-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:latest
[root@docker ~]# docker container run -d -p 10.0.0.200:8081:80 --name='n3' nginx:latest
[root@docker ~]# docker container run -d -p 80 --name='n5' nginx:latest(映射到本地主机的任意端口号上)
[root@docker ~]# docker container run -d -p 172.16.1.200::80 --name='n6' nginx:latest

3.容器的其他管理

docker ps -a -q
等价于:
docker container ls -a -q
[root@docker ~]# docker container ls -a -q
5f5edff25d81
[root@docker ~]# docker top 5f5edff25d81       #查看镜像的所有进程相关信息
等价于:
[root@docker ~]#docker container top 5f5edff25d81
查看日志:
[root@docker ~]# docker logs testxx
[root@docker ~]# docker logs -tf testxx(-t以时间显示  -f日志的形式)

五.docker的数据卷实现持久化存储

1.环境准备

[root@docker ~]# docker container rm -f `docker container ls -a -q`
e56bb31e1d06
f4b85b68e933
[root@docker ~]# systemctl restart network && systemctl restart docker
[root@docker ~]# docker container run -d --name="n1" -p 80:80 nginx
e47c0c79d62e4343d645a34df2290299c8bfb044fc3043c1920349b1a527b147
登陆:
[root@docker ~]# docker container exec -it n1 /bin/bash
root@6844360e39ea:/# cd /usr/share/nginx/html/
root@6844360e39ea:/usr/share/nginx/html# echo "lsn" >index.html
root@6844360e39ea:/usr/share/nginx/html# cat index.html
lsn

访问:10.0.0.200

容器gui 容器管理技术_docker_03

2.手工交互数据

[root@docker ~]# cd /opt
[root@docker opt]# vim index.html
test html
[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 ./#从容器拷贝到宿主机

访问:10.0.0.200

容器gui 容器管理技术_docker_04

3.Volume实现宿主机和容器的数据共享

数据共享:

[root@docker opt]# mkdir -p /opt/html 
[root@docker opt]# cp *.html html/
[root@docker opt]#  docker run -d --name="nginx_2" -p 83:80 -v /opt/html:/usr/share/nginx/html nginx
e942fdc23f90a7d6b23f8a354d6e5e7bf0b7455fd58935f8c730d98390684dbb
[root@docker opt]# cd html/
[root@docker html]# vim index.html
test html hi
开启另一个界面:
[root@docker ~]# docker container exec -it nginx_3 /bin/bash
root@89db1e32c917:/# cd /usr/share/nginx/html
root@89db1e32c917:/usr/share/nginx/html# cat index.html
test html hi
作用: 数据持久化

资源共享

开启两个nginx容器(90,91),共同挂载一个数据卷,实现静态资源共享
[root@docker html]# docker container run -d -p 93:80 --name "nginx_vol3" -v /opt/html:/usr/share/nginx/html nginx
d2d083d11e0651e815fe8808f3522f48e3361eae2bc08484478f731c45606f4b
[root@docker html]# docker container run -d -p 92:80 --name "nginx_vol2" -v /opt/html:/usr/share/nginx/html nginx

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
验证:
[root@docker ~]# docker container exec -it n8085 /bin/bash
root@f9c8b5d85e68:/# cd /opt/
root@f9c8b5d85e68:/opt# ls
a  b
root@f9c8b5d85e68:/opt# cd a
root@f9c8b5d85e68:/opt/a# ls
a.	txt
[root@docker html]# cd /opt
[root@docker opt]# cd Volume/
 [root@docker Volume]# ll
 total 0
drwxr--r-- 2 root root 19 May  1 15:49 a
drwxr--r-- 2 root root 19 May  1 15:49 b
[root@docker Volume]# cd a/
[root@docker a]# ls
a.	txt
修改宿主机
[root@docker a]# vim a.txt
a
查看docker
root@f9c8b5d85e68:/opt/a# cat a.txt
a
作用: 在集中管理集群中,大批量的容器都需要挂载相同的多个数据卷时,可以采用数据卷容器进行统一管理

六.制作本地局域网yum源

1.配置

1. 安装vsftpd软件
[root@docker ~]# yum install -y vsftpd
2. 启动ftp
[root@docker ~]# systemctl enable vsftpd
[root@docker ~]# systemctl start vsftpd
3. 上传系统镜像到虚拟机
[root@docker ~]# cd /mnt
上传centos7.5和6.9的镜像
[root@docker mnt]# rz –E
4. 配置yum仓库
mkdir -p /var/ftp/centos6.9
mkdir -p /var/ftp/centos7.5
[root@docker ~]# mount -o loop /mnt/CentOS-6.9-x86_64-DVD-1804.iso /var/ftp/centos6.9/
[root@docker centos6.9]# mount -o loop /mnt/CentOS-7-x86_64-DVD-1804.iso /var/ftp/centos7.5/
mount: /dev/loop0 is write-protected, mounting read-only
验证:
 
cat >/etc/yum.repos.d/ftp_6.repo <<EOF
[ftp]
name=ftpbase
baseurl=ftp://10.0.0.200/centos6.9
enabled=1
gpgcheck=0
EOF

[root@docker yum.repos.d]# yum clean all
[root@docker yum.repos.d]# yum makecache

cat >/etc/yum.repos.d/ftp_7.repo <<EOF
[ftp]
name=ftpbase
baseurl=ftp://10.0.0.200/centos7.5
enabled=1
gpgcheck=0
EOF

2.访问

ftp://10.0.0.200

容器gui 容器管理技术_nginx_05