文章目录
- 一.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体系结构
三.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端口
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
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
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