文章目录
- 前言
- 一、docker
- 1.1 为什么有docker
- 1.2 docker架构
- 1.3 docker 安装
- 1.4 docker中央仓库
- 1.5 docker 基本指令
- 1.6 docker数据卷,挂载
- 例:nginx 数据卷挂载
- 例:mysql 本地持久化
- 1.7 镜像制作
- 镜像结构
- dockerfile基础指令
- 容器生成镜像
- 1.8 docker 网络
- 1.9 部署案例
- 前端部署
- 后端部署
前言
市电子信息产业链劳动和技能竞赛,以赛促销备战笔记,因对微服务容器框架不熟,浪费大多时间在找配置文件中.
容器化
一、docker
考虑podman的生态不足,2024年7月重新整理docker
请参考2019年docker笔记 容器docker简介及基本命令
1.1 为什么有docker
1.2 docker架构
1.3 docker 安装
docker 官网:https://www.docker.com/ 点击doc文档
菜鸟教程: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://82m9ar63.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
docker info
查看使用registy仓库。
Docker中,默认情况下镜像和容器的存储位置是/var/lib/docker。
将默认的存储路径修改为新的存储路径:
vim /etc/docker/daemon.json
。在配置文件中添加以下内容:{“data-root”:”/mnt/docker”}
centos 8 兼容按centos7安装
在centos8中,dnf install docker
1.4 docker中央仓库
1.docker的官方中央仓库:这个镜像是最全的,但是下载速度最慢。
https://hub.docker.com/
2.国内的镜像网站:网易数帆, daocloud, … http://c.163.com/hub
http://hub.daocloud.io/ 不需要登录 (推荐使用)
1.5 docker 基本指令
我们来看一个案例,以提供感性认识并加深理解。
安装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
虽然我们能快速掌握案例,但不应忽视厚积薄发的理念
镜像基本命令
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)来将主机系统上的文件或目录挂载到容器中。
例: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
宿主机目录和容器目录挂载,将宿主机目录改为数据卷名。
-v mysql:/var/lib/mysql # 识别为一个数据卷叫mysql
-v ./mysql:/var/lib/mysql #识别为当前目录下的mysql
例: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
命令:
#从容器里面拷文件到宿主机
#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 镜像制作
镜像结构
dockerfile基础指令
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 网络
因ip随机不稳定,通过自建网络,可以通过容器名连接.
#创建网络
network create lih
#查看网络
docker network ls
#查看容器网络
docker inspect 625ec79eee83 |grep IPAddress
#添加网络到容器
docker network connect --help
docker network connect 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 inspect html 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.conf nginx
#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
#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;