0%

Docker实践笔记

命令大全

基本安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//安装
yum -y install docker
//启动
systemctl start docker
//自启
systemctl enable docker.service
//状态
systemctl status docker
//配制docker仓库
cat <<EOF > /etc/docker/daemon.json
{
"registry-mirrors": [
"https://ysgursum.mirror.aliyuncs.com"
]
}
EOF
systemctl daemon-reload
systemctl restart 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
//查看容器日志
//指令:
// -f:跟踪日志输出
// --since:从开始时间开始的所有日志,--since="2021-07-02"
// -t:显示时间戳
// --tail:仅列出最后N行数据,--tail=10
docker logs [指令] [容器id/容器名称]


//查看容器(所有)
docker ps -a (该命令为旧命令)
docker container ls -a (新命令,为了方便记忆)
//查看容器(执行中)
docker ps (该命令为旧命令)
docker container ls (新命令,为了方便记忆)

//进入容器1,该方法进入后退出容器不会停止
docker exec -it [容器id] /bin/bash
//进入容器2,该方法进入退出,容器也停止
docker attach [容器id]

//退出容器
exit


//删除容器
docker rm -f [容器id]



//启动,停止,重启
docker start [容器id]
docker stop [容器id]
docker restart [容器id]

安装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
//查询镜像
docker search mysql
//查询镜像版本
//https://hub.docker.com/search?type=image&q=

//拉取镜像(指定版本)
//docker pull 镜像名:TAG,默认latest
docker pull mysql

//查看镜像
docker images

//启动容器(添加和启动)
//-p 主机端口:容器端口
//--name 容器名称
//-v 目录映射以实现持久化,否则容器停止再启动数据丢失
此命令会将挂载的目录的文件更新全部发生在宿主机,
容器中为空目录
//-e mysql命令
//-d 后台启动
docker run -p 3306:3306 --name mysql \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-v /usr/local/docker/mysql/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=[新密码] \
-d mysql

//进入mysql
docker exec -it mysql bash
mysql -uroot -p
输入密码后进入

//开放远程访问
//MySQL8.0 mysql库中user表中密码字段更改为authentication_string
//先修改密码和规则
ALTER user 'root'@'localhost' IDENTIFIED BY '新的密码'
//修改用户权限
//1. use mysql;
//2. select host, user, authentication_string, plugin from user;
//3. update user set host='%' where user='root';
//4. FLUSH PRIVILEGES;

//如果连接还是报错,有可能是加密规则不同
//MySQL8.0之前的版本密码加密规则:mysql_native_password,
//MySQL8.0密码加密规则:caching_sha2_password
//同时修改密码和规则, 注意'root'@'%',说明是在修改权限后,修改前: 'root'@'localhost'
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '新的密码';

Dockerfile(定制镜像)的使用

参考Docker 的官方文档

Docker Compose(快速启动服务)的使用

Docker-Compose的一些常用命令

ompose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

Compose 使用的三个步骤:

  1. 使用 Dockerfile 定义应用程序的环境。
  2. 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
  3. 最后,执行 docker-compose up 命令来启动并运行整个应用程序。
实践

docker-compose.yml 实例如下:

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
#docker-compose 版本
version: "3.9"
services:
mysql:
# docker重新启动 该容器也重新拉起
restart: always
container_name: mysql
image: mysql:latest
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: Mp*ty811Gu
volumes:
- "/usr/local/docker/mysql/conf:/etc/mysql"
- "/usr/local/docker/mysql/logs:/var/log/mysql"
- "/usr/local/docker/mysql/data:/var/lib/mysql"
- "/usr/local/docker/mysql/mysql-files:/var/lib/mysql-files"
networks:
local:
ipv4_address: 192.168.5.100
nginx:
restart: always
container_name: nginx
image: nginx:latest
#root权限
privileged: true
ports:
- "80:80"
- "443:443"
volumes:
# 文件映射 , 注意如果修改了主机的文件,容器内的文件不会同步,必须重启容器
# Linux存储分为inode和block,其中inode记载了文件的属行信息,例如大小,在磁盘的什么位置
# block是4k大小的一个块,不足4k也会占用掉4k的空间
#
# 而docker的挂在文件,实际是记住了一个inode,通过inode找到这个block.如果是用>追加重定向写入文件
# 是可以同步到docker中的,但如果是rm + 重命名的,文件的inode发生改变,但docker中的inode还是指向了
# 之前的磁盘位置,所以文件没有改变
#
# rm原理: 删除了inode,没有inode无法正常访问文件,看起来删除了,但文件实际内容还在,直到被下次
# 写入到这里的文件内容覆盖.
- "/etc/localtime:/etc/localtime:ro"
- "/usr/local/docker/nginx/log:/var/log/nginx"
- "/usr/local/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf"
- "/usr/local/docker/nginx/cert:/usr/local/nginx/cert"
- "/cn/wuxiangknow/blog/public:/cn/wuxiangknow/blog/public"
networks:
local:
ipv4_address: 192.168.5.101
# 配制网络,保证各个容器可以互相访问
networks:
local:
driver: bridge
ipam: ##配制网络
driver: default
config:
- subnet: 192.168.5.0/24 ## ip地址网络 这里宿主机一般会是该网段的 192.168.5.1,所以不要设置自网段为1

设置开机自启,在/etc/rc.d/rc.local添加:

1
2
//-f 可以指定一个或多个docker-compose.yml,最后会拼在一起
/usr/local/bin/docker-compose -f /usr/local/docker/docker-compose.yml up -d
异常
container_linux.go:235

执行命令doocker-compose up -d出现以下错误

1
ERROR: for nginx  Cannot start service nginx: oci runtime error: container_linux.go:235: starting container process caused "container init exited prematurely"

经尝试,去除nginx.conf即可启动正常,排除linux与docker版本不兼容问题.最后发现- "/usr/local/docker/nginx/conf/nginx.cof:/etc/nginx/nginx.conf"存在拼写错误,修正后部署正常

您的支持是对我最大的动力 (●'◡'●)