[toc]

Docker部署

安装Docker

使用清华源:https://mirrors.tuna.tsinghua.edu.cn/

image-20230530175215829

1
2
3
4
5
6
7
8
9
10
11
12
# 点击问号,进入帮助
# 1.如果以前安装过docker先删除
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

# 2.下载docker yum源
wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo

# 3.将官方源的url改成清华源的url
sed -i 's+https://download.docker.com+https://mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo

# 4.安装docker
yum install -y docker-ce

启动Docker

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# 查看docker版本
docker version

docker version
Client: Docker Engine - Community
Version: 24.0.2
API version: 1.43
Go version: go1.20.4
Git commit: cb74dfc
Built: Thu May 25 21:55:21 2023
OS/Arch: linux/amd64
Context: default
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker
daemon running?

# 启动docker
systemctl start docker

Client: Docker Engine - Community
Version: 24.0.2
API version: 1.43
Go version: go1.20.4
Git commit: cb74dfc
Built: Thu May 25 21:55:21 2023
OS/Arch: linux/amd64
Context: default

Server: Docker Engine - Community
Engine:
Version: 24.0.2
API version: 1.43 (minimum version 1.12)
Go version: go1.20.4
Git commit: 659604f
Built: Thu May 25 21:54:24 2023
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.21
GitCommit: 3dce8eb055cbb6872793272b4f20ed16117344f8
runc:
Version: 1.1.7
GitCommit: v1.1.7-0-g860f061
docker-init:
Version: 0.19.0
GitCommit: de40ad0

配置docker镜像加速

登录阿里云

image-20230703200408417

image-20230703200420425

image-20230703200431451

image-20230703200453480

配置镜像加速

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 方案一
## 创建docker配置文件存放目录
mkdir /etc/docker

## 编辑配置文件
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://pgz00k39.mirror.aliyuncs.com"]
}

# 重启docker
systemctl daemon-reload
systemctl restart docker


# 方案二
## 创建docker配置文件存放目录
mkdir -p /etc/docker

## 将加速参数写入配置文件
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://pgz00k39.mirror.aliyuncs.com"]
}
EOF

# 重启docker
systemctl daemon-reload
systemctl restart docker

docker基本操作

镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 查找镜像
docker search nginx

# 拉取镜像(dockerhub)
docker pull 镜像名称:标签
docker pull nginx:latest
## 完整的镜像名=仓库名称:标签名称

# 查看当前都拉取了哪些镜像
docker image ls
## 或者
docker images

# 只查看镜像id
docker image ls -q
cc44224bfe20
605c77e624dd
eeb6ee3f44bd

# 删除镜像指定仓库名和标签
docker image rmi nginx:latest

# 指定id删除镜像
docker image rmi cc44224bfe20

# 导出镜像
docker image save centos:7 -o /tmp/centos7.tar.gz
docker image save centos:7 > /tmp/centos7.tar.gz
docker image save eeb6ee3f44bd -o /tmp/centos7.tar.gz
docker image save eeb6ee3f44bd > /tmp/centos7.tar.gz

# 导入镜像
docker image load -i /root/nginx_alpine.tar.gz
docker image load < /root/nginx_alpine.tar.gz

# 给镜像打标签 or 改名
docker image tag cc44224bfe20 nginx:alpine

# docker镜像、容器详细信息
docker inspect
docker inspect mysql:5.7

容器

docker container的规则

  1. 一个容器只做一件事
  2. 容器运行的前提条件是进程号PID为1的进程不退出

操作命令

  • 查看

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 查看运行了哪些容器
    docker ps

    # 查看所有容器
    docker ps -a

    # docker镜像、容器详细信息
    docker inspect
    docker inspect mysql:5.7
  • 运行

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    # 运行一个容器
    docker run centos:7 /bin/echo 'hello'
    ## 使用centos:7镜像启动一个容器,输出 hello内容
    ## /bin/echo 'hello' 容器PID为1的进程

    docker run --name=zls_c7 centos:7
    docker run --name=zls_nginx -d nginx:alpine

    # 语法格式
    docker run 镜像名:标签
    # 选项
    -it # 提供一个交互的终端
    --name # 给容器指定名字
    -d # 将容器放在后台运行
    -v # 挂载卷
    --rm # 停止容器时,自动删除容器
    -p # 端口映射
    • -p 宿主机端口:容器端口 # 将指定宿主机端口映射到容器端口
    • -p 宿主机IP:宿主机端口:容器端口 # 多个容器都想使用80端口
    • -p 宿主机IP::容器端口 # 宿主机起随机端口映射到容器中
    • -p 宿主机端口:容器端口/udp # 映射udp端口
    • -p 10.0.0.100::53/udp # 使用宿主机的10.0.0.100这个ip地址的随机端口的udp协议映射容器的udp53端口
    • -p 81:80 –p 443:443 # 可以指定多个映射端口
    • -p 5000-65535:5000-65535 # 范围端口映射

    # 示例
    docker run -it centos:centos7 /bin/bash
    docker pull centos:centos7
    docker create centos:centos7
    docker start centos:centos7id
    docker exec -it centos:centos7id

    # 停止容器
    docker stop 4f8bf2df4d50

    # 停止所有容器
    docker stop $(docker ps -aq)
  • 进入容器

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # 创建一个容器
    docker create nginx:alpine
    9e530b78f7bc29b661a9385e86249643392b1659198dc1c2633ceb8a1a10ae37

    # 启动容器
    docker start 9e530b78f7bc

    # 连接到一个容器
    docker exec -it 9e530b78f7bc /bin/sh

    # 删除容器
    docker rm 4f8bf2df4d50

    # 删除所有容器
    docker rm `docker ps -a -q`
  • 文件操作

    1
    2
    3
    4
    # 将宿主机文件拷贝到容器中
    docker cp h5_games fcc042180e51:/usr/share/nginx/html
    ## 访问浏览器
    url:http://10.0.0.81:799/h5_games/

部署示例:部署h5小游戏

docker运行一个nginx,部署h5小游戏

  • docker run -d -p 798:80 -v /root/h5_games:/usr/share/nginx/html cc44224bfe20

docker运行一个mysql,写入数据,保证数据不丢失

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# mysql存放数据的目录
mysql_dir:/var/liv/mysql/

# 创建本地MySQL文件目录
mkdir mysql_dir

## MySQL官方镜像内置环境变量
MYSQL_ROOT_PASSWORD # 指定MySQL的root用户密码
MYSQL_DATABASE # 指定MySQL容器,启动后,自动创建指定的库
MYSQL_USER # 指定MySQL容器,启动后,自动创建指定用户
MYSQL_PASSWORD # 指定MySQL容器,启动后,自动创建指定用户的密码
MYSQL_ALLOW_EMPTY_PASSWORD # 给容器中root用户一个空密码
MYSQL_RANDOM_ROOT_PASSWORD # 给容器中root用户一个随机密码
MYSQL_ONETIME_PASSWORD # 给容器中root用户一个临时一次性密码

# 使用docker启动mysql镜像
docker run \
-p 3307:3306 \
--name=mysql_test \
-v /root/mysql_dir:/var/lib/mysql/ \
-e MYSQL_ROOT_PASSWORD=123 \
-e MYSQL_DATABASE='wordpress' \
-e MYSQL_USER='wp_user' \
-e MYSQL_PASSWORD='123' \
-d c20987f18b13
## -e MYSQL_ROOT_PASSWORD=123 指定mysql中root用户的密码
--character-set-server=utf8
--collation-server=utf8_bin
## 指定字符集

# 连接容器
docker exec -it 8edf3ed1dbe9 /bin/sh

# 登陆数据库
mysql -uroot -p123

# 建库
create database if not exists test charset utf8;

# 查询
show databases;

# 退出数据库,退出容器
exit

# 查询正在运行的容器
docker ps

# 关闭mysql
docker stop a1480643e4bb

# 启动
docker run -p 3307:3306 --name=mysql_test4 -v /root/mysql_dir:/var/lib/mysql/ -e MYSQL_ROOT_PASSWORD=123 -d 3218b38490ce

# 查看是否在运行
docker ps

# 连接容器
docker exec -it 8edf3ed1dbe9 /bin/sh

# 登陆数据库
mysql -uroot -p123

# 查看数据库数据
show databses;