王海鱼 发表于 2024-8-29 14:52:16

容器docker 架构&下令&案例



前言

市电子信息产业链劳动和技能竞赛,以赛促学备战笔记,因对微服务容器框架不熟,浪费大多时间在找配置文件中.也荣幸得到三等奖
容器化
https://i-blog.csdnimg.cn/direct/3197e44660df42209ff92210facb43e8.png
https://i-blog.csdnimg.cn/direct/bb9771b0c4154f2f9358602d41bd6323.png
一、docker

思量podman的生态不敷,2024年7月重新整理docker
请参考2019年docker笔记 容器docker简介及基本下令
1.1 为什么有docker

https://i-blog.csdnimg.cn/direct/0733a191346e4398864687e45ca96cd6.png
1.2 docker架构

https://i-blog.csdnimg.cn/direct/ca590aa313f34c428127c96723f2ee79.png
1.3 docker 安装

docker 官网:https://www.docker.com/ 点击doc文档
https://i-blog.csdnimg.cn/direct/11aedc7cb7be4eaf92ac4447be9d3783.png
菜鸟教程:https://www.runoob.com/docker/centos-docker-install.html
# CentOS 7
# 移除旧版本docker
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

# 配置docker yum源。
sudo yum install -y yum-utils # yum-utils是一个提供额外功能的工具集,
                                                        #用于管理YUM(Yellowdog Updater, Modified)软件包管理器。
                                                       
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 可在/etc/yum.repos.d/ 中查看增加的


# 安装 最新 docker
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin


# 启动& 开机启动docker; enable + start 二合一
systemctl enable docker --now

# 配置加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://**m9ar63.mirror.aliyuncs.com"]
} # 阿里官网免费注册个
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
# 和Linux宿主机下载源的区别
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 清除缓冲
yum clean all
# 生成新缓冲
yum makecache
docker info 查看利用registy仓库。
Docker中,默认环境下镜像和容器的存储位置是/var/lib/docker。
将默认的存储路径修改为新的存储路径:
vim /etc/docker/daemon.json。在配置文件中添加以下内容:{“data-root”:”/mnt/docker”}
https://i-blog.csdnimg.cn/direct/3e7e4e89ed0c4b6bb02a30550f3809c9.png
centos 8 兼容按centos7安装
https://i-blog.csdnimg.cn/direct/be686c98fb11472aa25ea3d694f614c1.png
在centos8中,dnf install docker
https://i-blog.csdnimg.cn/direct/e922e14633de4d17bf54f6998b5ac452.png
1.4 docker中央仓库

https://i-blog.csdnimg.cn/direct/a89eb44a88334721b2196821b237ffcb.png
   1.docker的官方中央仓库:这个镜像是最全的,但是下载速率最慢。
https://hub.docker.com/
2.国内的镜像网站:网易数帆, daocloud, … http://c.163.com/hub
http://hub.daocloud.io/ 不必要登录 (推荐利用)
https://i-blog.csdnimg.cn/direct/87f2d4fd3ccb4b56b4057f917397d91e.pnghttps://i-blog.csdnimg.cn/direct/964a2bf552714dd5ba508e76d18cb6ee.png
1.5 docker 基本指令

https://i-blog.csdnimg.cn/direct/99fa07baf811427d8d54b7c691e4af22.png
我们来看一个案例,以提供感性认识并加深理解。
安装mysql容器案例,-e参数需到发布镜像网查看配置文档。
docker run -itd --name mysql-test -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai mysql
#-i interactive交互,-t tty终端,-d detach
docker run -d --name nginx -p 801:80 nginx:1.14.1
https://i-blog.csdnimg.cn/direct/516014e15ab9447f8d133048eab46238.png
https://i-blog.csdnimg.cn/direct/212043e01ce04b27b0d16b525547722a.png
固然我们能快速把握案例,但不应忽视厚积薄发的理念
https://i-blog.csdnimg.cn/direct/98b23dd5106345d1ac8c02a0bf75d660.png
镜像基本下令
docker pull nginx #拉取镜像
docker images # 查看镜像
# 镜像打包
docker save --help
docker save -o nginx.tar nginx:latest
# 删镜像
docker rmi nginx
# 压缩包加载镜像
docker load -i /opt/nginx.tar
容器基本下令
#创建容器
docker run -d --name nginx_r -p 801:80 nginx
#查看容器
docker ps -a
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Names}}\t{{.Status}}"
#可在~./bashrc 中使用别名快捷
#容器交互 需要容器中/bin/bash
docker exec -it nginx /bin/bash
# 停容器nginx
docker stop nginx
# 重新启动容器nginx
docker start nginx
#查看容器日志
docker logs nginx
1.6 docker数据卷,挂载

   由于容器只包含应用步伐和其依赖项,它们通常不包含一个完整的开辟环境,比方文本编辑器vi或编译器。因此,如果你必要在容器中编辑文件,你必要利用数据卷(volume)来将主机体系上的文件或目次挂载到容器中。
https://i-blog.csdnimg.cn/direct/418617ff42e44288a38a84b4d1b51335.png
https://i-blog.csdnimg.cn/direct/a8d57552a3604332a014b8a86c0b1f50.png
例:nginx 数据卷挂载

#使用docker volume 创建,查看卷
docker volume --help
#!注意删掉容器,数据卷对应关系依然存在
# 创建run时 使用数据卷
docker run -d --name nginx -p 801:80 -v html:/usr/share/nginx/html nginx
docker run -d --name nginx -p 801:80 -v html:/usr/share/nginx/html -v config:/etc/nginx/nginx

#查看容器卷宿主机路径
docker volume inspect html
docker volume inspect html config

cd /var/lib/docker/volumes/html/_data
https://i-blog.csdnimg.cn/direct/afa00b16e3f347f19357d0cadff560bf.png
宿主机目次和容器目次挂载,将宿主机目次改为数据卷名。
-v mysql:/var/lib/mysql # 识别为一个数据卷叫mysql
-v ./mysql:/var/lib/mysql #识别为当前目录下的mysql
https://i-blog.csdnimg.cn/direct/22012ebb3faf40d29deac3291d5257ed.png
例:mysql 本地持久化

官网文档:https://hub.docker.com/_/mysql查询镜像配置
$ docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag


docker run -itd --name mysql_r -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai \
-v /opt/mysql/data:/var/lib/mysql \
-v /opt/mysql/init:/docker-entrypoint-initdb.d \
-v /opt/mysql/conf:/etc/mysql/conf.d \
mysql
https://i-blog.csdnimg.cn/direct/03cb8d1fd27f413ab40cab7f1f439267.png
https://i-blog.csdnimg.cn/direct/98343301f1074dc9b4292f32a0bf53ef.pnghttps://i-blog.csdnimg.cn/direct/a793cf197e8a4ba094d60f5d95f79ff3.png
下令:
#从容器里面拷文件到宿主机
#docker cp testtomcat:/usr/local/tomcat/webapps /opt
#从宿主机拷文件到容器里面
docker cp activity.sql 8300a06b704b:/opt/
#使用source命令数据恢复
mysql -uroot -p123456
>source /opt/activity.sql ;
>exit;exit;
>#删容器
docker rm mysql -f
# 重新挂载,数据仍然存在
docker run -itd --name mysql_r -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai \
-v /opt/mysql/data:/var/lib/mysql \
-v /opt/mysql/init:/docker-entrypoint-initdb.d \
-v /opt/mysql/conf:/etc/mysql/conf.d \
mysql
#重新挂载,数据仍然存在
1.7 镜像制作

https://i-blog.csdnimg.cn/direct/23bb1653c398468eaa2cb2c620071ab4.png
镜像布局

https://i-blog.csdnimg.cn/direct/31527ed13d2547f0b8e30bcefc3e446b.png
dockerfile底子指令

https://i-blog.csdnimg.cn/direct/831a8d5a7562476bba2f3d4822f162c9.png
https://i-blog.csdnimg.cn/direct/8ea40d2d8ff943c6807c52ff56978e8c.png
https://i-blog.csdnimg.cn/direct/fd8a8f1f18e34821adc220cd303ce264.png
docker build -t imag:tag .
容器天生镜像

docker run -d -p 8081:8081\
-v /home/xiaotang0711/Desktop/docker/hadoop.jar:/usr/hadoop.jar \
--name springboot java:8u111\
java -jar /usr/hadoop.jar

#或copy 从宿主机到容器
docker cp /opt/test.js testtomcat:/usr/local/tomcat/webapps/test/js
# 生成一个新的镜像
docker commit 4eb13e778da3 centos:7-ssh
1.8 docker 网络

https://i-blog.csdnimg.cn/direct/c22106bc382b4adfa960c7d51d8b760f.png
因ip随机不稳定,通过自建网络,可以通过容器名毗连.
https://i-blog.csdnimg.cn/direct/0c711563a0a047728cc7c23115a023cd.png
#创建网络
network create lih
#查看网络
docker network ls
#查看容器网络
docker inspect 625ec79eee83 |grep IPAddress
#添加网络到容器
docker networkconnect --help
docker networkconnect lih 625ec79eee83
#再查看
docker inspect 625ec79eee83 |grep IPAddress

#可以创建容器的时候添加网络
1.9 部署案例

# 生成基础镜像
docker load -i nginx.tar
#添加网络
docker network create lihnet
前端部署

需求:创建一个新的nginx容器,nginx.conf,html 目次与容器挂载。
#数据卷
#会自动本地生成目录文件
docker run -d --name nginx --network lihnet-p 802:80 -v html:/usr/share/nginx/html -v config:/etc/nginx/nginx
docker volume inspecthtml config
#2或目录挂载
#!注意把赋值的nginx.conf到/home/nginx/html中注意把不存在的文件去掉
docker run -d --name nginx --network lihnet-p 802:80 -v /home/nginx/html:/usr/share/nginx/html -v /home/nginx/config:/etc/nginx/nginx

#3或文件对文件推荐使用
docker run -d --name nginx --network lihnet-p 802:80 -v /home/nginx/html:/usr/share/nginx/html -v /home/nginx/config/nginx.conf:/etc/nginx/nginx.confnginx

#4或使用默认配置文件
docker run -d --name nginx --network lihnet-p 802:80 -v /home/nginx/html:/usr/share/nginx/html nginx

docker exec -it nginx /bin/bash
#制作镜像
docker commit 78a96dd818af nignjingx
#重新生成
docker run -d -p 802:80 --name nginx2 --network lihnet nignjingx
dockerfile方式
vim dockerfile
......
# 基础镜像使用Nginx
FROM nginx
# 添加时区环境变量,亚洲,上海
ENV TimeZone=Asia/Shanghai
# 将前端dist文件中的内容复制到nginx目录
COPY dist/usr/share/nginx/html/
# 用本地的nginx配置文件覆盖镜像的Nginx配置
COPY default.conf /etc/nginx/conf.d
# 暴露端口
EXPOSE 80
......
后端部署

应用步伐
dockerfile方式
vim dockerfile
.....
FROM java:8
COPY *.jar /app.jar
EXPOSE 8080 #不使用expose指令,则镜像的用户无法从dockerfile直接了解到应用默认监听的端口
ENTRYPOINT ["java","-jar","app.jar"]
......
docker build -t api .
docker run -d --name javahtml -p 8080:8080 --network lihnet api
底子镜像java
#或基础镜像java生成容器
docker run -d -p 8080:8080 -v /opt/depos.jar:/usr/depos.jar --name javajar java java -jar /usr/depos.jar
mysql
docker run -itd --name mysql_r -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai \
-v /opt/mysql/data:/var/lib/mysql \
-v /opt/mysql/init:/docker-entrypoint-initdb.d \
-v /opt/mysql/conf:/etc/mysql/conf.d \
mysql

docker run -itd --name mysql_r -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai \
-v /opt/mysql/data:/var/lib/mysql \
mysql


#mysql
# 创建用户和密码
create user tom@'%' identified by 'ttt';
#赋予权限
grant all on *.* to root@'%' identified by '123456';

create database shop;
use shop;
source /var/lib/mysql/book.sql;

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 容器docker 架构&下令&案例