云计算实训36——mysql镜像管理、同步容器和宿主机时间、在容器外执行容器内命令、容器的ip地址不稳定问题、基础镜像的制作、镜像应用

一、线上考试系统的数据虚拟化技术部署

1.部署前段服务器

步骤一:将资源上传到服务器

将dist.zip上传给服务器

下载unzip的包

yum -y install unzip

解压

unzip dist.zip

步骤二:创建基础容器在服务器上

启动服务

systemctl start docker.service

拉取镜像

docker pull centos docker run -it --name c0 centos:latest /bin/bash

步骤三:在容器中修改yum源

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault8.5.2111.repo yum clean all && yum makecache

步骤四:在容器中安装epel

yum -y install epel-release

步骤五:在容器中安装nginx

yum -y install nginx

步骤六:退出

ctrl p+q

步骤七:导出tar包

docker export -o centos_nginx.tar

步骤八:引⼊tar包,称为镜像

docker import -m "维护世界和平" centos_nginx.tar centos:nginx

步骤九:查看镜像

docker image ls

docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

centos nginx 1c2a0901c77a 2 hours ago 368MB

centos httpd e9a1ee725b43 3 days ago 311MB

centos yum 82ca12d9b058 3 days ago 261MB

centos latest 5d0da3dc9764 2 years ago 31MB

步骤十:停⽤c0容器,删除c0容器

步骤十一:创建新的centos nginx容器,在创建的同时指定端⼝,以及挂载⽬录

docker run -it --name c0 -p80:80/tcp -v /opt/:/usr/share/nginx/html centos:nginx /bin/bash

步骤十二:在容器内部启动nginx服务

nginx

#退出

ctrl p +q

步骤十三:在宿主上把dist⽬录中的⽂件复制opt⽬录中

cp -r dist/* /opt

2.启动docker守护进程

systemctl start docker.service

3.搜索mysql镜像

docker search mysql

4.拉取mysql镜像

拉取镜像

docker pull mysql

查看镜像

docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

centos nginx 1c2a0901c77a 2 hours ago 368MB

centos httpd e9a1ee725b43 3 days ago 311MB

centos yum 82ca12d9b058 3 days ago 261MB

mysql latest a82a8f162e18 4 weeks ago 586MB

centos latest 5d0da3dc9764 2 years ago 231MB

5.创建镜像容器

复制代码
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端⼝

6.管理mysql

docker exec -it my01 mysql -uroot -proot

7.浏览器访问

192.168.1.32

二、让容器时间和宿主机时间⼀致

让容器共享宿主的/etc/localtime

root@docker001 \~\]# docker run -it --name c0 centos:nginx /bin/bash

查看日期

root@6caf88cce814 /\]# date Sat Aug 24 13:36:54 UTC 2024 \[root@docker001 \~\]# docker run -it --name c1 -v /etc/localtime:/etc/localtime centos:nginx /bin/bash \[root@f01eb51c8a59 /\]# date Sat Aug 24 21:38:29 CST 2024 \[root@docker001 \~\]# docker exec c0 date Sat Aug 24 13:40:14 UTC 2024 \[root@docker001 \~\]# docker exec c1 date Sat Aug 24 21:40:19 CST 2024

三、在容器外执行容器内的命令

容器内部已经安装的指令⽅可执⾏,否则⽆法执⾏

root@docker001 \~\]# docker exec c0 ifconfig OCI runtime exec failed: exec failed: unable to start container process: exec: "ifconfig": executable file not found in $PATH: unknown \[root@docker001 \~\]# docker exec c0 ls / bin dev etc home lib lib64 lost+found media

四、容器的ip地址不稳定问题

docker容器的ip地址是不固定,如果要作为服务器使⽤,就必须能够直接访问服务,不能直接使⽤ip,为容器设置域名,做端⼝映射也能保证,确定是⼀旦停⽤之后端⼝被占⽤,就⽆法再次启动,此时则需要做link

语法:

docker run --link. 容器的名称或者是id:⾃定义域名

注:被link容器必须处于启动状态,否则当前容器⽆法启动

--link 容器名:别名

root@docker001 \~\]# docker run -it --name c0 centos:nginx /bin/bash \[root@docker001 \~\]# 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 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

启动 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 64 bytes from mysqldb (172.17.0.3): icmp_seq=3 ttl=64 time=0.056 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.进程⽬录

ls /proc/

2.sys⽬录是内核⽂件保存位置,不允许修改

3.排除以上2个⽬录,并且将⽤户设置为数字

root@docker001 sys\]# tar --numeric-owner -- exclude=/proc --exclude=/sys -cvf centos7.tar /

4.将项⽬移动到dockerserver主机上

scp centos.tar [email protected]:~

5.查看tar包

root@docker001 \~\]# ls anaconda-ks.cfg centos7.tar centos_java17 frp initserver.sh jdk-17_linux-x64_bin.tar.gz

5.加载镜像

root@docker001 \~\]# docker import -m "冬冬最棒!" centos7.tar me:me00

6.查看镜像

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

7.创建容器

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

六、应用镜像

1.根据基础镜像创建容器

docker run -it --name c0 centos_yum:v0 /bin/bash

2.安装应⽤

yum -y install httpd

3.退出

ctrl p + q

4.使用commit应用镜像

root@docker001 \~\]# docker commit c0 centos:httpd

查看镜像

root@docker001 \~\]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos httpd bbf5ed97db84 3 minutes ago 340MB

相关推荐
RussellFans11 分钟前
Linux 文本三剑客(grep, awk, sed)
linux·运维·服务器
&永恒的星河&13 分钟前
基于TarNet、CFRNet与DragonNet的深度因果推断模型全解析
深度学习·因果推断·cfrnet·tarnet·dragonnet
Chuncheng's blog24 分钟前
CentOS 7如何编译安装升级gcc至7.5版本?
linux·运维·c++·centos
听风吹等浪起26 分钟前
CentOS在vmware局域网内搭建DHCP服务器【踩坑记录】
linux·服务器·centos
明月看潮生33 分钟前
青少年编程与数学 01-011 系统软件简介 04 Linux操作系统
linux·青少年编程·操作系统·系统软件·编程与数学
猫咪老师19951 小时前
多系统一键打包docker compose下所有镜像并且使用
java·docker·容器
Blossom.1181 小时前
使用Python和Flask构建简单的机器学习API
人工智能·python·深度学习·目标检测·机器学习·数据挖掘·flask
aitav01 小时前
⚡️ Linux Docker 基本命令参数详解
linux·运维·docker
Nazi61 小时前
docker数据管理
运维·docker·容器
姓刘的哦2 小时前
ubuntu中使用docker
linux·ubuntu·docker