视频来源:
01.Docker课程介绍_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1HP4118797?p=1
Docker官网:
docker build | Docker Docshttps://docs.docker.com/reference/cli/docker/image/build/
一、Docker的安装和配置
1.卸载旧版Docker
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2.配置yum源
(1)安装yum工具
yum install -y yum-utils
(2) 配置Docker的yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
3.安装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.获取镜像加速器
容器镜像服务 (aliyun.com)https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
二、Docker部署Mysql
注意:如果已经安装了mysql需要执行下面的命令:
systemctl stop mysqld
systemctl disable mysqld
1.安装Mysql
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
mysql
解读:
docker run
: 这是Docker用于运行容器的基本命令。-d
: 表示以守护进程模式运行容器,即在后台运行。--name mysql
: 指定容器的名称,这里命名为mysql
。-p 3306:3306
: 将宿主机的3306端口映射到容器内的3306端口,这样就可以通过宿主机的3306端口访问MySQL服务。-e TZ=Asia/Shanghai
: 设置环境变量,将容器内的时区设置为亚洲/上海时区。-e MYSQL_ROOT_PASSWORD=123
: 设置环境变量,初始化MySQL的root用户密码为123
。mysql
: 要运行的Docker镜像的名称,这里是MySQL的官方镜像。
三、Docker操作
3.1入门实例:
docker pull nginx
docker images
docker save -o nginx.tar nginx:latest
docker images
docker load -i nginx:latest
docker ps
docker start nginx
docker ps
docker stop nginx
docker ps -a
docker start nginx
docker logs nginx
docker logs -f nginx
docker exec -it nginx bash
ls -l
exit
docker exec -it mysql bash
docker exec -it mysql mysql -uroot -p123
exit
docker stop mysql
docker rm mysql
docker start mysql
docker rm mysql -f
3.2设置命令别名
(1)
# 修改/root/.bashrc文件
vi /root/.bashrc
内容如下:
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias dps='docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"'
alias dis='docker images'
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
(2) 别名命令生效
source /root/.bashrc
3.3 Docker数据卷
docker ps
docker rm -f nginx
docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx
docker volume ls
docker volume inspect html
cd /var/lib/docker/volumes/html/_data
ll
四、本地目录的挂载
# 1.删除原来的MySQL容器
docker rm -f mysql
# 2.进入root目录
cd ~
# 3.创建并运行新mysql容器,挂载本地目录
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
-v ./mysql/data:/var/lib/mysql \
-v ./mysql/conf:/etc/mysql/conf.d \
-v ./mysql/init:/docker-entrypoint-initdb.d \
mysql
# 4.查看root目录,可以发现~/mysql/data目录已经自动创建好了
ls -l mysql
# 结果:
总用量 4
drwxr-xr-x. 2 root root 20 5月 19 15:11 conf
drwxr-xr-x. 7 polkitd root 4096 5月 19 15:11 data
drwxr-xr-x. 2 root root 23 5月 19 15:11 init
# 查看data目录,会发现里面有大量数据库数据,说明数据库完成了初始化
ls -l data
# 5.查看MySQL容器内数据
# 5.1.进入MySQL
docker exec -it mysql mysql -uroot -p123
# 5.2.查看编码表
show variables like "%char%";
# 5.3.结果,发现编码是utf8mb4没有问题
+--------------------------+--------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8mb3 |
| character_sets_dir | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+
# 6.查看数据
# 6.1.查看数据库
show databases;
# 结果,hmall是黑马商城数据库
+--------------------+
| Database |
+--------------------+
| hmall |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
# 6.2.切换到hmall数据库
use hmall;
# 6.3.查看表
show tables;
# 结果:
+-----------------+
| Tables_in_hmall |
+-----------------+
| address |
| cart |
| item |
| order |
| order_detail |
| order_logistics |
| pay_order |
| user |
+-----------------+
# 6.4.查看address表数据
+----+---------+----------+--------+----------+-------------+---------------+-----------+------------+-------+
| id | user_id | province | city | town | mobile | street | contact | is_default | notes |
+----+---------+----------+--------+----------+-------------+---------------+-----------+------------+-------+
| 59 | 1 | 北京 | 北京 | 朝阳区 | 13900112222 | 金燕龙办公楼 | 李佳诚 | 0 | NULL |
| 60 | 1 | 北京 | 北京 | 朝阳区 | 13700221122 | 修正大厦 | 李佳红 | 0 | NULL |
| 61 | 1 | 上海 | 上海 | 浦东新区 | 13301212233 | 航头镇航头路 | 李佳星 | 1 | NULL |
| 63 | 1 | 广东 | 佛山 | 永春 | 13301212233 | 永春武馆 | 李晓龙 | 0 | NULL |
+----+---------+----------+--------+----------+-------------+---------------+-----------+------------+-------+
4 rows in set (0.00 sec)
五、Dockerfile语法
六、容器网络互连
显示网络接口的命令
ip addr
docker network create heima
docker network connect heima mysql
七、部署Java应用
对项目的父工程进行package后
将打包好的tar文件和Dockerfile放入/etc/docker中
输入命令
docker build -t hmall .
命令 docker build -t hmall .
是用于构建一个名为 hmall
的 Docker 镜像。这个命令会查找当前目录下的 Dockerfile
文件,并根据该文件中的指令来构建镜像。构建完成后,这个镜像会被打上 hmall
的标签,这样你就可以使用这个标签来运行容器或者进行其他操作。
在执行这个命令之前,请确保当前目录中有一个 Dockerfile
文件,并且文件中包含了构建镜像所需的全部指令。
创建容器
docker run -d --name hm -p 8080:8080 --network heima hmall
docker start nginx
docker start mysql
docker start hm
docker logs -f hm
八、部署前端
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 heima \
nginx
九、DockerCompose
上传dockerCompose文件docker-compose.yml内容为:
version: "3.8"
services:
mysql:
image: mysql
container_name: mysql
ports:
- "3306:3306"
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"
networks:
- hm-net
hmall:
build:
context: .
dockerfile: Dockerfile
container_name: hmall
ports:
- "8080:8080"
networks:
- hm-net
depends_on:
- mysql
nginx:
image: nginx
container_name: nginx
ports:
- "18080:18080"
- "18081:18081"
volumes:
- "./nginx/nginx.conf:/etc/nginx/nginx.conf"
- "./nginx/html:/usr/share/nginx/html"
depends_on:
- hmall
networks:
- hm-net
networks:
hm-net:
name: hmall
nginx.conf也要将代理的路径从hm改为hmall
docker rm -f mysql nginx hm
docker compose up -d
docker compose down
docker network ls