回顾
1.环境安装
cat << EOF |tee /etc/modules-load/k8s.conf > overlay > br_netfilter > EOF overlay br_netfilter cat << EOF |tee /etc/sysctl/k8s.conf >net.bridge.bridge-nf-call-iptables = 1 >net.bridge.bridge-nf-call-ip6tables = 1 >net.ipv4.ip_forward = 1 >EOF #yum镜像 #yum服务器和客户端
2.镜像案例
#启动服务 systaemctl start docker #查看镜像 docker images #删除镜像 docker rmi 5a docker rmi centos:latest #在公共仓库查找镜像 docker search centos #拉取镜像 docker pull centos
3.管理容器(在镜像添加了一个可写层)
#创建容器 docker run -it --name c0 centos:latest /bin/bash #查看容器 docker ps #查看正在运行的容器 docker ps --all #查看所有容器 #切回宿主机 ctrl p q #启动容器 docker start c0 c1 #停用容器 docker stop c0 c1 #删除容器 docker rm c0 c1 #如果容器正在运行,容器是删除的,如果容器没有删除,对应的镜像也无法删除
4.镜像迁移
#save docker save -o centos.tar centos:latest #load docker save -i centos.tar
5.生成镜像
#export 通过容器生成tar包 docker export centoshttpd.tar c0 #import 通过tar包引入镜像 docker imort -m "aaaa" centoshttpd centos:httpd docker images
6.获得镜像ip地址
#进入镜像的bash yum install iprouter,net-tools ip a #使用exec指令 docker exec 容器名称或id yum -y install iproute docker exec c0 ip a #直接使用inspect命令 docker inspect c0
7.端口映射 -p
docker run -it --name c0 -p80:80/tcp centos:latest /bin/bash docker run -it --name c1 -p80 centos:latest /bin/bash #宿主机指定一个大于等于3278的容器 docker ps --all #查看实际给予的端口 docker run -it --name c2 -p192.168.1.51::80 centos:latest /bin/bash
数据持久化
docker run -it --name c4 -v /opt/:/var/www/html/ centos:latest /bin/bash
线上考试系统的数据 虚拟化上色数据 虚拟化技术部署
1.部署前段服务器
#1.上传资源 #2.创建基础,在服务器上 systemctl start docker docker pull centos docker run -it --name c0 centos:latest /bin/bash #3.在容器中修改yum源 curl -o /etc/yum.repos.d/Centos-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo #4.在容器中安装epel yum -y install epel-release #5.在容器中安装nginx yum -y install nginx #6.ctrl p q #7.导出tar包 docker export -o centos_nginx.tar c0 #8.引入tar包,称为镜像 docker import -m "维护世界和平" centos_nginx centos:nginx #9.查看镜像 docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos nginx b6fdf4c10bdc 3 seconds ago 366MB mysql latest a82a8f162e18 4 weeks ago 586MB centos latest 5d0da3dc9764 2 years ago 231MB #10.停用c0容器,删除C0容器 docker stop c0 docker rm c0 #11.创建新的centos nginx容器,在创建的同时指定端口,以及挂载目录 docker run -i --name c0 -p80:80/tcp -v /opt/:/usr/share/nginx/html centos:nginx /bin/bash #12.在容器内部启动nginx服务 nginx #ctrl p q #13.在宿主上把dist⽬录中的⽂件复制opt⽬录中 cp -r dist/* /opt
#1.搜索mysql镜像 docker search mysql #2.拉取mysql镜像 docker pull mysql #3.创建镜像容器 docker run -d --name my01 -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 mysql:latest # -d 后台运⾏,并输出hashcode # -e MYSQL_ROOT_PASSWORD=root 设置mysql密码 # -p 映射3306端⼝ #4.管理mysql docker exec -it my01 mysql uroot -proot
2.让容器时间和宿主机时间一致
[root@docker ~]# docker run -it --name c0 centos:latest /bin/bash [root@97a83160b7cd /]# date Mon Aug 26 06:37:27 UTC 2024 [root@docker ~]# docker run -it --name c2 -v /etc/localtime:/etc/localtime centos:latest /bin/bash [root@e866eda2a2e7 /]# date Mon Aug 26 14:42:18 CST 2024
3.exec命令
# 容易内部已经安装的指令⽅可执⾏,否则⽆法执⾏ docker exec c0 ifconfig docker exec c2 ls / bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv
4.容器之间的依赖
容器的ip地址不稳定link
--link 容器苗:别名
docker run -it --name c0 centos:nginx /bin/bash 退出 docker run -it --link c0:mysqldb --name c1 centos:nginx /bin/bash [root@ba46c0e4055d /]# ping mysqldb PING mysqldb (172.17.0.2) 56(84) bytes of data. 64 bytes from mysqldb (172.17.0.2): icmp_seq=1 ttl=64 time=0.057 ms 64 bytes from mysqldb (172.17.0.2): icmp_seq=2 ttl=64 time=0.044 ms 64 bytes from mysqldb (172.17.0.2): icmp_seq=3 ttl=64 time=0.039 ms
测试
# 暂停服务 [root@docker001 ~]# docker stop c0 c1 c0 c1 # 先启动主动依赖容器 [root@docker001 ~]# docker start c1 # ⽆法启动,提示被link的容器没有启动 Error response from daemon: Cannot link to a non running container: /c0 AS /c1/mysqldb Error: failed to start containers: c1 [root@docker001 ~]# docker start c1 Error response from daemon: Cannot link to a non running container: /c0 AS /c1/mysqldb Error: failed to start containers: c1 # 先启动被依赖的容器 [root@docker001 ~]# docker start c0 c0 # 在启动主动依赖的容器 [root@docker001 ~]# docker start c1 c1
测试 使⽤⼀个容器占⽤172.17.0.2,测试
# 停⽤容器 [root@docker001 ~]# docker stop c0 c1 c0 c1 # 创建新容器 占⽤172.17.02 [root@docker001 ~]# docker run -it --name c2 centos:nginx /bin/bash [root@2114e0e97441 /]# [root@docker001 ~]# # 启动 c0 c1 [root@docker001 ~]# docker start c0 c1 c0 c1 # 在c1容器ping别名 [root@docker001 ~]# docker exec c1 ping mysqldb PING mysqldb (172.17.0.3) 56(84) bytes of data. 64 bytes from mysqldb (172.17.0.3): icmp_seq=1 ttl=64 time=0.157 ms 64 bytes from mysqldb (172.17.0.3): icmp_seq=2 ttl=64 time=0.037 ms
每次启动都修改了/ets/hosts⽂
[root@docker001 ~]# docker exec c1 cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.3 mysqldb 20f05670b7df c0 172.17.0.4 ba46c0e4055d
1.docker容器的ip地址是不固定,如果要作为服务器使⽤,就必须能 够直接访问服
务,不能直接使⽤ip,为容器设置域名,做端⼝映射也 能保证,确定是⼀旦停⽤之
后端⼝被占⽤,就⽆法再次启动了
2.docker run --link. 容器的名称或者是id:⾃定义域名
3.被link容器必须处于启动状态,否则当前容器⽆法启 动
5.docker镜像容器
-
docker client向dcoker daemon 发送创建容器的请求 docker run
-
docker daemon查找有⽆客户端需要的镜像
-
如果没有,就到容器的镜像仓库下载需要的镜像 pull
-
拿到容器镜像后,启动容器
1.在docker daemo初始状态(没有镜像的时候) /var/lib/docker不 存在
2.当docker daemon服务器启动,会⾃动创建dock⽬录
3.在没有镜像的情况下。查看overlay2这个⽬录是只有两个⽂件, 管道⽂件 ,l⽬
录(管理镜像和容器的软连接的⽬录)
4.当我们pull⼀个镜像之后 /va r/lib/docker/overlay2下就有⼀个新 的⽬录,这个
⽬录就是cenonos的基础⽬录,这个新的⽬录就是镜 像,就是不可读的层
5.当我们使⽤这个镜像创建⼀个容器,在overlay2会添加2个⽬录, ⼀个是init⽬
录,另外⼀个⽬录就是容器的可写层,⽤户对系统的修 改都在可写层中进行
6.基础镜像制作
1.进程⽬录
2.sys⽬录是内核⽂件保存位置,不允许修改
3.排除以上2个⽬录,并且将⽤户设置为数字
tar --numeric-owner -exclude=/proc --exclude=/sys -cvf centos7.tar /
4.将项⽬移动到dockerserver主机上
5.查看tar包
[root@docker001 ~]#ls anaconda-ks.cfg centos7.tar centos_java17 frp initserver.sh jdk-17_linux-x64_bin.tar.gz
6.加载镜像
docker import -m "袁佳佳" yjj.tar zm.v0
7.查看镜像
[root@docker001 ~]#docker images REPOSITORY TAG IMAGE ID CREATED SIZE me me00 64abc01ff8c4 3 minutes ago 2.55GB centos nginx 12fea1b890de 24 hours ago 366MB centos java17 b6bf774de7bb 24 hours ago 550MB centos_httpd v0 fffc96d791d5 2 days ago 309MB centos_yum v0 191d9c84f461 2 days ago 260MB mysql latest a82a8f162e18 4 weeks ago 586MB centos latest 5d0da3dc9764 2 years ago 231MB
8.创建容器
[root@docker001 ~]# docker run -it --name c00 me:me00 /bin/bash [root@4199382c490f /]# ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr
7.应用镜像
1.根据基础镜像创建容器
docker run -it --name c0 centos_yum:v0 /bin/bash
2.安装应⽤
yum -y install httpd
退出
3..docker commit
[root@docker001 ~]# docker commit --help Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] Create a new image from a container's changes Aliases: docker container commit, docker commit Options: -a, --author string Author (e.g., "John Hannibal Smith <hannibal@a-team.com>") -c, --change list Apply Dockerfile instruction to the created image -m, --message string Commit message -p, --pause Pause container during commit (default true) [root@docker001 ~]# docker commit c0 centos:httpd sha256:bbf5ed97db84f87ec8cbc8e82297fe22f79ad437d60 3f743840c0b7b62be4196 [root@docker001 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos httpd bbf5ed97db84 3 minutes ago 340MB me me00 64abc01ff8c4 29 minutes ago 2.55GB centos nginx 12fea1b890de 24 hours ago 366MB centos java17 b6bf774de7bb 25 hours ago 550MB centos_httpd v0 fffc96d791d5 2 days ago 309MB centos_yum v0 191d9c84f461 2 days ago 260MB mysql latest a82a8f162e18 4 weeks ago 586MB centos latest 5d0da3dc9764 2 years ago 231MB