我的操作系统centos7本地vm
docker安装
1、卸载旧版本
如果系统中已经存在旧的Docker,则先卸载
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2、配置一个Docker的yum仓库
首先要安装一个yum工具
yum install -y yum-utils
安装成功后,执行命令,配置Docker的yum源:
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
3、安装docker
执行命令,安装Docker
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
4、启动和校验
# 启动Docker
systemctl start docker
# 停止Docker
systemctl stop docker
# 重启
systemctl restart docker
# 设置开机自启
systemctl enable docker
# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps
5、配置镜像
注册阿里云账号
首先访问阿里云网站:阿里云-计算,为了无法计算的价值注册一个账号
在首页的产品中,找到阿里云的容器镜像服务:
页面向下滚动,即可找到配置的文档说明:
# 创建目录
mkdir -p /etc/docker
# 复制内容,注意把其中的镜像加速地址改成你自己的
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
EOF
# 重新加载配置
systemctl daemon-reload
# 重启Docker
systemctl restart docker
docker使用
安装mysql
docker run -d \
> --name mysql \
> -p 3306:3306 \
> -e TZ=Asia/Shanghai \
> -e MYSQL_ROOT_PASSWORD=123 \
> mysql
查看docker安装的容器
docker ps
docker 打包
docker save -o nginx.tar nginx:latest
删除镜像
docker rmi nginx:latest
加载
docker load -i nginx.tar
dockerfile构建镜像
docker build -t docker-demo .
查看镜像
docker images
创建容器并且运行
docker run -d --name nginx -p 80:80 nginx
查看进程
docker ps
也可以加格式化方式访问,格式会更加清爽
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"
停止容器
docker stop nginx
查看所有容器
docker ps -a --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"
运行容器
docker start nginx
查看容器详细信息
docker inspect nginx
进入容器,查看容器内目录
docker exec -it nginx bash
查看容器中的目录
ls -l
退出
exit
进入MySQL并且使用mysql客户端
docker exec -it mysql mysql -uroot -p
删除容器
docker rm nginx
强制删除容器
docker rm -f nginx
查看日志
docker logs nginx
持续查看日志
docker logs -f nginx
起别名
vi ~/.bashrc
alias dps='docker ps --format "table{{.ID}}\t{{.Image}}\t{{.Ports}}\t{{Status}}\t{{.Names}}"'
alias dis='docker images'
source ~/.bashrc
数据卷命令
创建数据卷
docker volume create
查看所有数据卷
docker volume ls
删除指定数据卷
docker volume rm
查看某个数据卷详情
docker volume inspect
清除数据卷
docker volume prune
docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx
cd /var/lib/docker/volumes/html/_data
mysql容器本地挂载
基于宿主机目录实现MySQL数据目录、配置文件、初始化脚本的挂载(
挂载/root/mysql/data到容器内的/var/lib/mysql目录 挂载/root/mysql/init到容器内的/docker-entrypoint-initdb.d目录,携带课前资料准备的SQL脚本 挂载/root/mysql/conf到容器内的/etc/mysql/conf.d目录,携带课前资料准备的配置文件
mkdir mysql
cd mysql/
mkdir data
mkdir conf
mkdir init
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
-v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/conf:/etc/mysql/conf.d \
-v /root/mysql/init:/docker-entrypoint-initdb.d \
mysql
dockerfile自定义镜像
镜像就是包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。构建镜像的过程其实就是把上述文件打包的过程。
官网文档: https://docs.docker.com/engine/reference/builder
dockerfile构建镜像
docker build -t docker-demo .
运行镜像
docker run -d --name dd -p 8080:8080 docker-demo
查看日志 dd是容器名称
docker logs -f dd
网络网桥
创建网络
docker network create 网络名称
连接
docker network connect 网络名 容器名
容器创建并且连接网络
docker run -d --name 容器名称 -p 8080:8080 --network 网络名称 镜像名称
访问ping 容器名称
nginx 静态资源挂载
docker run -d \
--name nginx \
-p 18080:18080 \
-p 18081:18081 \
-v /root/nginx/html:/usr/share/nginx/html \
-v /root/nginx/nginx.conf:/etc/nginx/nginx.conf \
--network 网络名称\
nginx
Docker Compose
Docker Compose通过一个单独的docker-compose,yml 模板文件(YAML格式)来定义一组相关联的应用容器帮
助我们实现多个相互关联的Docker容器的快速部署。
docker-compose.yml
文件
# Docker Compose 文件版本,这里使用的是 3.8 版本
version: "3.8"
# 定义服务
services:
# MySQL 服务
mysql:
# 使用官方的 MySQL 镜像
image: mysql
# 设置容器的名称为 mysql
container_name: mysql
# 端口映射,将宿主机的 3306 端口映射到容器的 3306 端口
ports:
- "3306:3306"
# 环境变量,设置时区为中国上海,并设置 MySQL root 用户的密码为 123
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 123
# 卷挂载,将配置文件、数据文件和初始化脚本分别挂载到容器内的相应目录
volumes:
- "./mysql/conf:/etc/mysql/conf.d"
- "./mysql/data:/var/lib/mysql"
- "./mysql/init:/docker-entrypoint-initdb.d"
# 将该服务连接到名为 hm-net 的网络
networks:
- hm-net
# 自定义服务 hmall
hmall:
# 使用当前目录下的 Dockerfile 构建镜像
build:
context: .
dockerfile: Dockerfile
# 设置容器的名称为 hmall
container_name: hmall
# 端口映射,将宿主机的 8080 端口映射到容器的 8080 端口
ports:
- "8080:8080"
# 将该服务连接到名为 hm-net 的网络
networks:
- hm-net
# 依赖 MySQL 服务,确保 MySQL 服务启动后再启动 hmall 服务
depends_on:
- mysql
# Nginx 服务
nginx:
# 使用官方的 Nginx 镜像
image: nginx
# 设置容器的名称为 nginx
container_name: nginx
# 端口映射,将宿主机的 18080 和 18081 端口分别映射到容器的 18080 和 18081 端口
ports:
- "18080:18080"
- "18081:18081"
# 卷挂载,将自定义的 Nginx 配置文件和 HTML 目录挂载到容器内的相应目录
volumes:
- "./nginx/nginx.conf:/etc/nginx/nginx.conf"
- "./nginx/html:/usr/share/nginx/html"
# 依赖 hmall 服务,确保 hmall 服务启动后再启动 Nginx 服务
depends_on:
- hmall
# 将该服务连接到名为 hm-net 的网络
networks:
- hm-net
# 定义网络
networks:
# 创建一个名为 hm-net 的网络,并在服务的 networks 中引用它
hm-net:
# 设置网络的名称,这里使用 'hmall' 加上 '网络' 的描述性名称
name: hmall-net
运行
docker compose up -d
结束
docker compose down
项目部署流程
mysql数据卷自定义挂载
docker run -d \
--name 容器名称 \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
-v /root/mysql/data:/var/lib/mysql \ //数据
-v /root/mysql/conf:/etc/mysql/conf.d \ //配置文件
-v /root/mysql/init:/docker-entrypoint-initdb.d \ //脚本
镜像名称
// mysql
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
-v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/conf:/etc/mysql/conf.d \
-v /root/mysql/init:/docker-entrypoint-initdb.d \
mysql
创建网络
docker network create 网络名称
连接将要用的环境容器连接到同一个网络比如mysql容器
docker network connect 网络名 容器名
关键yml
项目打包mvn package
dockerfile
# 基础镜像
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY hm-service.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]
构建镜像
docker build -t 镜像名称 .
容器创建并且连接网络
docker run -d --name 容器名称 -p 8080:8080 --network 网络名称 镜像名称
nginx配置文件挂载
自己的静态资源放/root/nginx/html中
/root/nginx/下放nginx.conf
nginx 容器创建运行并且挂载网络连接
docker run -d \
--name nginx \
-p 18080:18080 \
-p 18081:18081 \
-v /root/nginx/html:/usr/share/nginx/html \
-v /root/nginx/nginx.conf:/etc/nginx/nginx.conf \
--network 网络名称\
nginx
nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/json;
sendfile on;
keepalive_timeout 65;
server {
listen 18080;
# 指定前端项目所在的位置
location / {
root /usr/share/nginx/html/静态资源文件夹1;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location /api {
rewrite /api/(.*) /$1 break;
proxy_pass http://项目容器名称:8080;
}
}
server {
listen 18081;
# 指定前端项目所在的位置
location / {
root /usr/share/nginx/html/静态资源文件夹2;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location /api {
rewrite /api/(.*) /$1 break;
proxy_pass http://项目容器名称:8080;
}
}
}