docker命令记录

安装及配置docker(基于Ubuntu)

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
sasurai@ubuntu:~$ sudo apt install docker.io
sasurai@ubuntu:~$ docker version
Client:
Version: 19.03.2
API version: 1.40
Go version: go1.12.9
Git commit: 6a30dfca03
Built: Mon Sep 16 03:56:22 2019
OS/Arch: linux/amd64
Experimental: false

Server:
Engine:
Version: 19.03.2
API version: 1.40 (minimum version 1.12)
Go version: go1.12.9
Git commit: 6a30dfca03
Built: Wed Sep 11 22:45:55 2019
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.2.10-0ubuntu1
GitCommit:
runc:
Version: spec: 1.0.1-dev
GitCommit:
docker-init:
Version: 0.18.0
GitCommit:

设置为阿里云的镜像加速器

1
sudo vim /etc/docker/daemon.json

内容如下:

1
2
3
{
"registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
}

重启docker:

1
2
sudo systemctl daemon-reload
sudo systemctl restart docker

免sudo使用docker命令

Linux 中将用户添加到指定组的指令

将一个已有用户 testuser 增加到一个已有用户组 root 中,使此用户组成为该用户的附加用户组,可以使用带 -a 参数的 usermod 指令。-a 代表 append, 也就是将用户添加到新用户组中而不必离开原有的其他用户组。不过需要与 -G 选项配合使用:usermod -a -G root testuser
如果要同时将 testuser 的主要用户组改为 root,则直接使用 -g 选项:usermod -g root testuser
如果要将testuser用户从root组中删除,则gpasswd -d testuser root

1
2
# 将当前用户加入docker组
sudo gpasswd -a $USER docker

注销该用户后,重新登录该用户

网上还有一种修改如下:

1
2
3
4
5
6
# 新增docker组(如果不存在docker组)
sudo groupadd docker
# docker组中加入当前用户
sudo usermod -aG docker $USER
# 重启docker服务
sudo systemctl restart docker

也有稍微带了一点说明的如下:

Docker守候进程绑定的是一个unix socket,而不是TCP端口。这个套接字默认的属主是root,其他是用户可以使用sudo命令来访问这个套接字文件。因为这个原因,docker服务进程都是以root帐号的身份运行的。当docker进程启动的时候,会设置该套接字可以被docker这个分组的用户读写。

但是少了一个验证的环节,/var/run/docker.sock的具体权限如下:

1
2
3
4
5
6
# socket文件权限
sasurai@ubuntu:~$ ll /var/run/docker.sock
srw-rw---- 1 root docker 0 Nov 18 01:05 /var/run/docker.sock=
# docker命令权限
sasurai@ubuntu:~$ ll `which docker`
-rwxr-xr-x 1 root root 89057216 Sep 11 15:45 /usr/bin/docker*

从以上权限可看出:

/var/run/docker.sock,其他用户无读写权限,只有docker组用户和root用户可以读写。而对docker命令来说,任何用户都可以运改命令,但是并不一定都能通过该命令操作/var/run/docker.sock

拉取MySQL镜像

可用的标签如下:

  • 8.0.18, 8.0, 8, latest
  • 5.7.28, 5.7, 5
  • 5.6.46, 5.6

这里选择5.7版本的MySQL数据库:docker pull mysql:5.7

将MySQL跑起来

最简单的方式:

1
2
3
4
5
docker run \ # Run a command in a new container
--name mysql-master \ # Assign a name to the container
-e MYSQL_ROOT_PASSWORD=mysql-master \ # Set environment variables
-p 3306:3306 \ # Publish a container's port(s) to the host
mysql:5.7 # 镜像名称:版本号

环境变量

  • MYSQL_ROOT_PASSWORD强制要求的,会在容器创建时将root用户密码设置成改变量的值。没有启动会报错,如下所示:

    1
    2
    3
    4
    5
    6
    sasurai@ubuntu:~$ docker run --name mysql-master2 -p 3307:3307 mysql:5.7
    2019-11-19 06:16:27+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.28-1debian9 started.
    2019-11-19 06:16:27+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
    2019-11-19 06:16:27+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.28-1debian9 started.
    2019-11-19 06:16:27+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified
    You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
  • MYSQL_DATABASE:可选项。会在容器创建的时候创建改数据库。如果有指定用户名和密码,会将该用户设置成改数据库的超级用户。

  • MYSQL_USER, MYSQL_PASSWORD:可选项。容器创建时创建该用户。

挂载自定义配置文件

1
2
3
docker run --name some-mysql \
-v /my/custom:/etc/mysql/conf.d \ # Bind mount a volume
-e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

疑问

docker rundocker container run之间是什么关系?

CLI restructured

Docker has grown many features over the past couple years and the Docker CLI now has a lot of commands (40 at the time of writing). Some, like build or run are used a lot, some are more obscure, like pause or history. The many top-level commands clutters help pages and makes tab-completion harder.

In Docker 1.13, we regrouped every command to sit under the logical object it’s interacting with. For example list and startof containers are now subcommands of docker container and history is a subcommand of docker image.

docker container list

docker container start

docker image history

These changes let us clean up the Docker CLI syntax, improve help text and make Docker simpler to use. The old command syntax is still supported, but we encourage everybody to adopt the new syntax.

from : https://www.docker.com/blog/whats-new-in-docker-1-13/

简而言之,两者等效,但是后者是命令重构之后的写法,更推荐后面的写法。同时,还有很多其他类似的命令如:docker startdocker container start,也是同样的道理。但是感觉前面的命令不用敲container,用起来还是蛮香的。

真香

作者

遇寻

发布于

2019-11-20

更新于

2022-04-21

许可协议

评论