Docker
文章目录
-
- Docker
-
- [1. 下载 (centos)](#1. 下载 (centos))
- [2. 部署 MySQL](#2. 部署 MySQL)
- [3. 常用命令](#3. 常用命令)
- [4. 数据卷](#4. 数据卷)
- [5. 自定义镜像](#5. 自定义镜像)
- [6. Java 项目部署](#6. Java 项目部署)
1. 下载 (centos)
- 卸载旧版
shell
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine \
docker-selinux
- 配置 docker 的 yum 库
- 首先要安装一个yum工具
shell
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
- 配置Docker的yum源(阿里云源
shell
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
- 更新yum,建立缓存
shell
sudo yum makecache fast
- 安装 Docker
shell
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
- 启动和校验
bash
# 查看当前版本
docker -v
# 启动Docker
systemctl start docker
# 停止Docker
systemctl stop docker
# 重启
systemctl restart docker
# 设置开机自启
systemctl enable docker
# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps
- 配置镜像加速
https://cloud.tencent.com/document/product/1207/45596
2. 部署 MySQL
shell
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql
命令解读
docker run
: 创建并运行容器-d
则是让容器以后台进程运行
--name mysql
: 给容器起个名字叫mysql
,你可以叫别的
-p 3306:3306
: 设置端口映射。
-e TZ=Asia/Shanghai
: 配置容器内进程运行时的一些参数(设置环境变量)
- 格式:
-e KEY=VALUE
,KEY和VALUE都由容器内进程决定- 案例中,
TZ =Asia/Shanghai
是设置时区;MYSQL_ROOT_PASSWORD=123
是设置MySQL默认密码
mysql
: 运动的镜像名字
- 完整写法: REPOSITORY:TAG。(mysql:5.7)
- 没有指定 tag,默认 latest
3. 常用命令
命令 | 说明 |
---|---|
docker pull | 拉取镜像 |
docker push | 推送镜像到DockerRegistry |
docker images | 查看本地镜像 |
docker rmi | 删除本地镜像 |
docker run | 创建并运行容器(不能重复创建) |
docker stop | 停止指定容器 |
docker start | 启动指定容器 |
docker restart | 重新启动容器 |
docker rm | 删除指定容器 |
docker ps | 查看容器 |
docker logs | 查看容器运行日志 |
docker exec | 进入容器 |
docker save | 保存镜像到本地压缩文件 |
docker load | 加载本地压缩文件到镜像 |
docker inspect | 查看容器详细信息 |
docker rm : 删除一个或多个 容器
docker rmi : 删除一个或多个 镜像
bash
# 拉取最新版本 nginx 镜像
docker pull nginx
# 保存 nginx 镜像
docker save -o image/nginx.tar nginx:latest
docker rmi nginx:latest
# 导入 nginx 镜像
docker load -i image/nginx.tar
部署 nginx
shell
docker run -d \
--name nginx \
-p 80:80 \
nginx
bash
# 停止容器
docker stop nginx
# 运行容器
docker start nginx
查看日志
shell
docker logs nginx
# 持续查看日志
docker logs -f nginx
进入容器内部
shell
docker exec -it nginx bash
docker exec -it mysql mysql -uroot -p123456
命令别名:
bash
alias dps='docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"'
alias dis='docker images'
4. 数据卷
数据卷(volume)是一个虚拟目录,是容器内目录 与宿主机****目录之间映射的桥梁。
以Nginx为例,我们知道Nginx中有两个关键的目录:
html
:放置一些静态资源conf
:放置配置文件
如果我们要让Nginx代理我们的静态资源,最好是放到html
目录;如果我们要修改Nginx的配置,最好是找到conf
下的nginx.conf
文件。
docker volume create | 创建数据卷 |
---|---|
docker volume ls | 查看所有数据卷 |
docker volume rm | 删除指定数据卷 |
docker volume inspect | 查看某个数据卷的详情 |
docker volume prune | 清除数据卷 |
bash
docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx
docker volume ls
docker volume inspect html
# 查看容器数据卷挂载
docker inspect nginx
基于宿主机目录实现 MySQL 数据目录、配置文件、初始化脚本的挂载
- 挂载
/root/mysql/data
到容器内的/var/lib/mysql
目录 - 挂载
/root/mysql/init
到容器内的/docker-entrypoint-initdb.d
目录(初始化的SQL脚本目录) - 挂载
/root/mysql/conf
到容器内的/etc/mysql/conf.d
目录(这个是MySQL配置文件目录)
shell
docker run -d \
--name mysql \
--privileged=true \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/init:/docker-entrypoint-initdb.d \
-v /root/mysql/conf:/etc/mysql/conf.d \
mysql:8.0
cnf文件
[client]
default_character_set=utf8mb4
[mysql]
default_character_set=utf8mb4
[mysqld]
character_set_server=utf8mb4
collation_server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
5. 自定义镜像
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 docker-demo.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]
6. Java 项目部署
redis 部署
https://www.cnblogs.com/lzp110119/p/17869310.html
bash
docker run \
--restart=always \
--log-opt max-size=100m \
--log-opt max-file=2 \
-p 6379:6379 \
--name redis \
-v /root/redis/conf/redis.conf:/etc/redis/redis.conf \
-v /root/redis/data:/data \
-d redis \
redis-server /etc/redis/redis.conf \
--appendonly yes \
--requirepass 123456
mysql
bash
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/init:/docker-entrypoint-initdb.d \
-v /root/mysql/conf:/etc/mysql/conf.d \
mysql
sql
docker run -e MYSQL_ROOT_PASSWORD=123456 mysql
网络互联
bash
docker network create
docker network connect mynet redis
docker network connect mynet mysql
bash
docker build -t proname .
bash
docker run -d --name starry -p 8080:8080 --network mynet starry
nginx
bash
docker run -d \
--name nginx \
-p 80:80 \
-v /root/nginx/html:/usr/share/nginx/html \
-v /root/nginx/nginx.conf:/etc/nginx/nginx.conf \
--network mynet \
nginx