一、docker 镜像使用
1 镜像加速
配置文件
# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://922i8x4i.mirror.aliyuncs.com"]
}
重新启动docker
服务
# systemctl daemon-reload
# systemctl restart docker
daemon-reload
: 重新加载某个服务的配置文件,如果新安装了一个服务,归属于 systemctl 管理,要是新服务的服务程序配置文件生效,需重新加载。
2 镜像查找
root@station:/home/ubuntu# docker search ubuntu
3 pull 镜像
root@station:/home/ubuntu# docker images
root@station:/home/ubuntu# docker pull ubuntu
root@station:/home/ubuntu# docker images ubuntu
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest ccc6e87d482b 4 weeks ago 64.2MB
4 给镜像打tag
root@station:/home/ubuntu# docker tag ubuntu:latest 192.168.100.2:5000/ubuntu:v1
root@station:/home/ubuntu# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry latest 708bc6af7e5e 3 weeks ago 25.8MB
192.168.100.2:5000/centos latest 470671670cac 4 weeks ago 237MB
192.168.100.2:5000/ubuntu v1 ccc6e87d482b 4 weeks ago 64.2MB
ubuntu latest ccc6e87d482b 4 weeks ago 64.2MB
各个选项说明:
- REPOSITORY:表示镜像的仓库源
- TAG:镜像的标签
- IMAGE ID:镜像ID
- CREATED:镜像创建时间
- SIZE:镜像大小
5 push镜像到私有仓库
root@station:/home/ubuntu# docker push 192.168.100.2:5000/ubuntu:v1
The push refers to repository [192.168.100.2:5000/ubuntu]
f55aa0bd26b8: Pushed
1d0dfb259f6a: Pushed
21ec61b65b20: Pushed
43c67172d1d1: Pushed
v1: digest: sha256:bc025862c3e8ec4a8754ea4756e33da6c41cba38330d7e324abd25c8e0b93300 size: 1152
6 删除镜像
# docker rmi ubuntu
Untagged: ubuntu:latest
Untagged: ubuntu@sha256:8d31dad0c58f552e890d68bbfb735588b6b820a46e459672d96e585871acc110
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry latest 708bc6af7e5e 3 weeks ago 25.8MB
192.168.100.2:5000/centos latest 470671670cac 4 weeks ago 237MB
192.168.100.2:5000/ubuntu v1 ccc6e87d482b 4 weeks ago 64.2MB
二、容器使用
01、客户端
docker info
普通用户没有权限使用docker命令,解决办法如下:
$ sudo usermod -a -G docker $USER
02、获取镜像
$ docker pull ubuntu
04、启动容器
$ docker run -it ubuntu /bin/bash
参数说明:
- -i:交互式操作
- -t:终端
- -d:后台运行
- /bin/bash:交互式shell
- —name xx 容器命令。
要退出终端,直接输入exit
05、启动已停止的容器
查看所有容器
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c71871814c2c ubuntu "/bin/bash" About a minute ago Up About a minute p2
9c0ff19d41cf ubuntu "/bin/bash" 6 minutes ago Up 6 minutes mystifying_sanderson
298b49f13231 ubuntu "/bin/bash" 9 minutes ago Exited (0) 6 minutes ago stoic_panini
cd346770502e nginx:v3 "nginx -g 'daemon of?? 16 hours ago Up 16 hours 0.0.0.0:9090->80/tcp nginx-a
989c06a3787a nginx:v3 "nginx -g 'daemon of?? 16 hours ago Exited (0) 16 hours ago nginx-add
9bceda5808a0 nginx:v3 "nginx -g 'daemon of?? 16 hours ago Up 16 hours 0.0.0.0:9000->80/tcp nginx-cc
8c9ae55b917b nginx:v3 "-p 8081:80" 16 hours ago Created 80/tcp nginx-cp
使用docker start 启用一个停止的容器
$ docker start 298b49f13231
298b49f13231
查看容器是否启动成功
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
298b49f13231 ubuntu "/bin/bash" 11 minutes ago Up 12 seconds stoic_panini
06、后台运行
$ docker run -itd --name ubuntu-test ubuntu /bin/bash
6542fc525dfb99a3f6ed946f22748be011a510a79336d05528c945a577eb14ad
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6542fc525dfb ubuntu "/bin/bash" 4 seconds ago Up 3
通过-d 参数指定后台运行
07、停止一个容器
$ docker stop <容器 ID> or 容器 name>
08、进入容器
在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:
- docker attach
- docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。
attach 命令
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c71871814c2c ubuntu "/bin/bash" 19 minutes ago Up
$ docker attach c7
注意: 如果从这个容器退出,会导致容器的停止。
exec 命令
$ docker exec -it p2 /bin/bash
root@c71871814c2c:/#
root@c71871814c2c:/# exit
exit
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c71871814c2c ubuntu "/bin/bash" 21 minutes ago Up 21 minutes p2
09、导入导出容器
导出容器
$ docker export c7 > Bhanv.tar
$ ls
Bhanv.tar
$ du -sh Bhanv.tar
64M Bhanv.tar
导入容器
$ cat Bhanv.tar | docker import - ubuntu:v1
sha256:563b8ef3e19c5e87d9511055b3ea9d0e6ddf9abce47404a7e4edff6abf9e4ea2
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu v1 563b8ef3e19c About a minute ago 64.2MB
此外,也可以通过url 或某个目录来导入
第一种方法:通过url 导入
$ docker import http://example.com/exampleimage.tgz example/imagerepo
第二种方法:通过某个目录来导入
$ docker import ./Bhanv.tar ubuntu:v2
sha256:c579a2149b472d9415d458de9845da851425605181141ca1965f28ab9364f94c
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu v2 c579a2149b47 5 seconds ago 64.2MB
10 、删除容器
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c71871814c2c ubuntu "/bin/bash" 34 minutes ago Up 34 minutes p2
9c0ff19d41cf ubuntu "/bin/bash" 38 minutes ago Up 38 minutes mystifying_sanderson
$ docker rm -f c7 ---- 指定ID
c7
$ docker rm -f mystifying_sanderson ----指定name
mystifying_sanderson
$ docker ps
ubuntu@station:~/docker$
11、清除所有处于终止状态的容器
$ docker container prune
1、查询终止状态的容器
$ docker ps -a | grep -v "Up"
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b805023a5cb3 ubuntu "/bin/bash" 20 minutes ago Exited (0) 20 minutes ago ubuntu-test1
6542fc525dfb ubuntu "/bin/bash" 22 minutes ago Exited (0) 20 minutes ago ubuntu-test
989c06a3787a nginx:v3 "nginx -g 'daemon of?? 17 hours ago Exited (0) 17 hours ago nginx-add
8c9ae55b917b nginx:v3 "-p 8081:80" 17 hours ago Created 80/tcp nginx-cp
4dbf00cfd8a2 nginx:v1 "nginx -g 'daemon of?? 21 hours ago Exited (0) 17 hours ago great_taussig
5b609c85f789 nginx:v1 "-p 80:8080" 21 hours ago Created 80/tcp cranky_wiles
740d912c06b8 registry "/entrypoint.sh /etc?? 25 hours ago Exited (2) 25 hours ago peaceful_mcnulty
8d609af51785 registry "/entrypoint.sh /etc?? 25 hours ago Exited (2) 25 hours ago xenodochial_mirzakhani
b46739ab5fb3 registry "/entrypoint.sh /etc?? 25 hours ago Exited (2) 25 hours ago clever_proskuriakova
2、清除终止状态的容器
$ docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
b805023a5cb3dd9986a47e6f0b040997cf46a24082fe6d59aee7e5f60d86b4af
6542fc525dfb99a3f6ed946f22748be011a510a79336d05528c945a577eb14ad
989c06a3787af851611463f5a2c40d99d350cef9fcd4dce066538a46b85e2a55
8c9ae55b917ba25b572566f780036455eb91a853f4ce65ef8158175540d2c94d
4dbf00cfd8a2e56fff4c406a055af17f00a00776173506bf6d4c9db132945424
5b609c85f78925cc7576bb28b4a5c5e85d9225eea5efd3f8fd9e614c31267bff
740d912c06b876964010947b1e95f04a418740d33dbb660815697421b8d4b323
8d609af51785ad9e122b312cb88f546981671a82c84adacf05d58a9c0ca710ce
b46739ab5fb308f1cb44dc5c3f6500d07a969e8c2493ea9e5b34326cfdf51623
Total reclaimed space: 0B
3、确认是否清除成功
$ docker ps -a | grep -v "Up"
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
三、Dockerfile详解
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
1、使用Dockerfile定制镜像
1.1 FROM 和 RUN 指令的作用
1、定制nginx镜像(构建好的镜像内会有一个 /usr/share/nginx/html/index.html 文件)
cat Dockerfile
FROM nginx
RUN echo "<h1> This is test page</h1>" > /usr/share/nginx/html/index.html
root@station:~/docker# docker build -t nginx:v1 .
FROM:定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像。后续的操作都是基于 nginx
RUN:用于执行后面跟着的命令行命令。有以下俩种格式:
- shell 格式: RUN <命令行命令>
- exec 格式 : RUN [“可执行文件”, “参数1”, “参数2”]
2、bulid 镜像
root@station:~/docker# docker build -t nginx:v1 .
Sending build context to Docker daemon 2.048kB
Step 1/2 : FROM nginx
latest: Pulling from library/nginx
bc51dd8edc1b: Pull complete
66ba67045f57: Pull complete
bf317aa10aa5: Pull complete
Digest: sha256:ad5552c786f128e389a0263104ae39f3d3c7895579d45ae716f528185b36bc6f
Status: Downloaded newer image for nginx:latest
---> 2073e0bcb60e
Step 2/2 : RUN echo "<h1> This is test page</h1>" > /usr/share/nginx/html/index.html
---> Running in 71bfbf7d2448
Removing intermediate container 71bfbf7d2448
---> 37b298849642
Successfully built 37b298849642
Successfully tagged nginx:v1
root@station:~/docker#
启动nginx docker
镜像
docker run --name nginx -d -p 8080:80 -P -v /root/docker/index.html:/usr/share/nginx/html/index.html nginx:v1
-p 参数:属主主机端口:docker 暴露的端口
测试ok!
查看端口映射
docker port/协议 —-> 属主主机端口
# docker port nginx
80/tcp -> 0.0.0.0:8080
1.2 COPY 指令
从上下文目录中复制文件或者目录到容器里指定路径
COPY [--chown=<user>:<group>] <源路径1>... <目标路径>
<源路径>:源文件或者源目录,这里可以是通配符表达式,其通配符规则要满足 Go 的 filepath.Match 规则。例如:
COPY hom* /mydir/
COPY hom?.txt /mydir/
<目标路径>:容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建。
docker cp 命令用法
root@station:~/docker# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4dbf00cfd8a2 nginx:v1 "nginx -g 'daemon of?? 7 minutes ago Up 7 minutes 80/tcp great_taussig
16c3d177d220 registry "/entrypoint.sh /etc?? 3 hours ago Up 3 hours 0.0.0.0:5000->5000/tcp priceless_khorana
root@station:~/docker# docker cp 4dbf00cfd8a2:/usr/share/nginx/html/index.html /root/docker/index.html^C
root@station:~/docker# pwd
/root/docker
root@station:~/docker# ls
Dockerfile
root@station:~/docker# docker cp 4dbf00cfd8a2:/usr/share/nginx/html/index.html /root/docker/index.html
root@station:~/docker# ls
Dockerfile index.html
root@station:~/docker# cat index.html
<h1> This is test page</h1>
root@station:~/docker#
example:
Dockerfile:
root@station:~/docker# cat Dockerfile
FROM nginx
COPY index.html /usr/share/nginx/html/index.html
build docker
root@station:~/docker# docker build -t nginx:v3 .
Sending build context to Docker daemon 15.87kB
Step 1/2 : FROM nginx
---> 2073e0bcb60e
Step 2/2 : COPY index.html /usr/share/nginx/html/index.html
---> 851c58b3ab7c
Successfully built 851c58b3ab7c
Successfully tagged nginx:v3
run docker
# docker run --name nginx-cc -d -p 9000:80 nginx:v3
# docker port nginx-cc
80/tcp -> 0.0.0.0:9000
访问测试
1.3 ADD指令
ADD 指令和 COPY 的使用格式一致(同样需求下,官方推荐使用 COPY)。功能也类似,不同之处如下:
- ADD 的优点:在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>。
- ADD 的缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。
1.4 CMD
类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:
- CMD 在docker run 时运行。
- RUN 是在 docker build。
作用:为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。
注意:如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。
格式:
CMD <shell 命令>
CMD ["<可执行文件或命令>","<param1>","<param2>",...]
CMD ["<param1>","<param2>",...] # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数
推荐使用第二种格式,执行过程比较明确。第一种格式实际上在运行的过程中也会自动转换成第二种格式运行,并且默认可执行文件是 sh。
1.5 ENTRYPOINT
类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。
但是, 如果运行 docker run 时使用了 —entrypoint 选项,此选项的参数可当作要运行的程序覆盖 ENTRYPOINT 指令指定的程序。
优点:在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需的参数。
注意:如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。
格式:
ENTRYPOINT ["<executeable>","<param1>","<param2>",...]
可以搭配 CMD 命令使用:一般是变参才会使用 CMD ,这里的 CMD 等于是在给 ENTRYPOINT 传参,以下示例会提到。
示例:
假设已通过 Dockerfile 构建了 nginx:test 镜像:
FROM nginx
ENTRYPOINT ["nginx", "-c"] # 定参
CMD ["/etc/nginx/nginx.conf"] # 变参
1、不传参运行
$ docker run nginx:test
容器内会默认运行以下命令,启动主进程。
nginx -c /etc/nginx/nginx.conf
2、传参运行
$ docker run nginx:test -c /etc/nginx/new.conf
容器内会默认运行以下命令,启动主进程(/etc/nginx/new.conf:假设容器内已有此文件)
nginx -c /etc/nginx/new.conf
1.6 ENV
设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。
格式:
ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...
以下示例设置 NODE_VERSION = 7.2.0 , 在后续的指令中可以通过 $NODE_VERSION 引用:
ENV NODE_VERSION 7.2.0
RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz" \
&& curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc"
1.7 ARG
构建参数,与 ENV 作用一至。不过作用域不一样。ARG 设置的环境变量仅对 Dockerfile 内有效,也就是说只有 docker build 的过程中有效,构建好的镜像内不存在此环境变量。
构建命令 docker build 中可以用 —build-arg <参数名>=<值> 来覆盖。
格式:
ARG <参数名>[=<默认值>]
1.8 VOLUME
定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。
作用:
- 避免重要的数据,因容器重启而丢失,这是非常致命的。
- 避免容器不断变大。
格式:
VOLUME ["<路径1>", "<路径2>"...]
VOLUME <路径>
在启动容器 docker run 的时候,我们可以通过 -v 参数修改挂载点。
1.9 EXPOSE
仅仅只是声明端口。
作用:
- 帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射。
- 在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。
格式:
EXPOSE <端口1> [<端口2>...]
2.0 WORKDIR
指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。(WORKDIR 指定的工作目录,必须是提前创建好的)。
docker build 构建镜像过程中的,每一个 RUN 命令都是新建的一层。只有通过 WORKDIR 创建的目录才会一直存在。
格式:
WORKDIR <工作目录路径>
2.1 USER
用于指定执行后续命令的用户和用户组,这边只是切换后续命令执行的用户(用户和用户组必须提前已经存在)。
格式:
USER <用户名>[:<用户组>]
2.2 HEALTHCHECK
用于指定某个程序或者指令来监控 docker 容器服务的运行状态。
格式:
HEALTHCHECK [选项] CMD <命令>:设置检查容器健康状况的命令
HEALTHCHECK NONE:如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令
HEALTHCHECK [选项] CMD <命令> : 这边 CMD 后面跟随的命令使用,可以参考 CMD 的用法。
2.3 ONBUILD
用于延迟构建命令的执行。简单的说,就是 Dockerfile 里用 ONBUILD 指定的命令,在本次构建镜像的过程中不会执行(假设镜像为 test-build)。当有新的 Dockerfile 使用了之前构建的镜像 FROM test-build ,这是执行新镜像的 Dockerfile 构建时候,会执行 test-build 的 Dockerfile 里的 ONBUILD 指定的命令。
格式:
ONBUILD <其它指令>
四、部署应用示例
01、安装ubuntu
1、查看ubuntu版本
https://hub.docker.com/_/ubuntu?tab=tags&page=1
2、拉取最新版的镜像
$ docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
Digest: sha256:8d31dad0c58f552e890d68bbfb735588b6b820a46e459672d96e585871acc110
Status: Image is up to date for ubuntu:latest
docker.io/library/ubuntu:latest
3、查看本地镜像
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest ccc6e87d482b 4 weeks ago 64.2MB
4、运行容器,并且可以通过 exec 命令进入 ubuntu 容器
$ docker run -itd --name u1 ubuntu:latest
f282a4a089f5c5ec40fbbe986288832c332f53b042eddf61cdb4252e268ac4ac
$ docker exec -it u1 /bin/bash
root@f282a4a089f5:/# uname -a
Linux f282a4a089f5 4.15.0-55-generic #60-Ubuntu SMP Tue Jul 2 18:22:20 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
root@f282a4a089f5:/#
5、安装成功
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f282a4a089f5 ubuntu:latest "/bin/bash" About a minute ago Up About a minute u1
02、安装centos容器
1、查看可用版本
https://hub.docker.com/_/centos?tab=tags&page=1
2、拉取指定版本的 CentOS 镜像,这里我们安装指定版本为例(centos7)
$ docker pull centos:centos7
3、查看本地镜像
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest ccc6e87d482b 4 weeks ago 64.2MB
centos centos7 5e35e350aded 3 months ago 203MB
4、运行容器,并通过exec进入容器
$ docker run -itd --name c1 centos:centos7
7504336e39fb85833f141300c6d6c08fd42baca20e95ea0ca52d20a3e652e927
$ docker exec -it c1 /bin/bash
[root@7504336e39fb /]# uname -a
[root@7504336e39fb /]# cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
5、安装成功
ubuntu@station:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7504336e39fb centos:centos7 "/bin/bash" About a minute ago Up About a minute c1
f282a4a089f5 ubuntu:latest "/bin/bash" 10 minutes ago Up 10 minutes u1
03、安装nginx容器
1、查看可用的 Nginx 版本
访问 Nginx 镜像库地址: https://hub.docker.com/_/nginx?tab=tags。
2、获取最新版本的nginx镜像
$ docker pull nginx:latest
3、查看本地镜像
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 2073e0bcb60e 2 weeks ago 127MB
4、运行容器
$ docker run --name n1 -v /home/ubuntu/docker/:/usr/share/nginx/html -d -p 8080:80 nginx
5、安装成功
ubuntu@station:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
970908bec021 nginx "nginx -g 'daemon of?? 28 seconds ago Up 27 seconds 0.0.0.0:8080->80/tcp n1
输出测试内容
$ echo "<h1> <center> This is test page</center></h1>" > /home/ubuntu/docker/index.html
04、安装mysql
1、查看可用的 MySQL 版本
访问 MySQL 镜像库地址:https://hub.docker.com/_/mysql?tab=tags 。
此外,我们还可以用 docker search mysql 命令来查看可用版本:
ubuntu@station:~/docker$ docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation?? 9137 [OK]
mariadb MariaDB is a community-developed fork of MyS?? 3235 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create?? 676 [OK]
centos/mysql-57-centos7 MySQL 5.7 SQL database server 68
mysql/mysql-cluster Experimental MySQL Cluster Docker images. Cr?? 62
centurylink/mysql Image containing mysql. Optimized to be link?? 61 [OK]
deitch/mysql-backup REPLACED! Please use http://hub.docker.com/r?? 41 [OK]
bitnami/mysql Bitnami MySQL Docker Image 35 [OK]
tutum/mysql Base docker image to run a MySQL database se?? 34
2、拉取 MySQL 镜像
这里我们拉取官方的最新版本的镜像:
$ docker pull mysql:latest
3、查看本地镜像
使用以下命令来查看是否已安装了 mysql:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest 791b6e40940c 2 weeks ago 465MB
4、运行容器
安装完成后,我们可以使用以下命令来运行 mysql 容器:
$ docker run -idt --name m1 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
1a125ab4339de3f3a2bf347f403807a1f5131f1c7292455eb13843bba197ac8f
参数说明:
-p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。
MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码
5、安装成功
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1a125ab4339d mysql "docker-entrypoint.s?? 4 seconds ago Up 2 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp m1
本机可以通过 root 和密码 123456 访问 MySQL 服务。
$ docker exec -it m1 /bin/bash
root@1a125ab4339d:/# mysql -h localhost -u root -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.19 MySQL Community Server - GPL
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.01 sec)
mysql> create database test;
Query OK, 1 row affected (0.00 sec)
在其他主机上测试
$ mysql -h 192.168.100.2 -u root -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.19 MySQL Community Server - GPL
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
5 rows in set (0.00 sec)
十、其他
01、普通用户执行docker命令
$ sudo usermod -a -G docker $USER
02、清除系统上的容器
$ docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
03、清除所有处于终止的容器
$ docker rm -f `docker ps | awk '{print $1}' | grep -v C`
04 、清除系统上的镜像
$ docker rmi `docker images | awk '{print $3}' | grep -v I`