一、docker 镜像使用

1 镜像加速

配置文件

  1. # cat /etc/docker/daemon.json
  2. {
  3. "registry-mirrors": ["https://922i8x4i.mirror.aliyuncs.com"]
  4. }

重新启动docker服务

  1. # systemctl daemon-reload
  2. # systemctl restart docker

daemon-reload: 重新加载某个服务的配置文件,如果新安装了一个服务,归属于 systemctl 管理,要是新服务的服务程序配置文件生效,需重新加载。

2 镜像查找

  1. root@station:/home/ubuntu# docker search ubuntu

3 pull 镜像

  1. root@station:/home/ubuntu# docker images
  2. root@station:/home/ubuntu# docker pull ubuntu
  3. root@station:/home/ubuntu# docker images ubuntu
  4. REPOSITORY TAG IMAGE ID CREATED SIZE
  5. ubuntu latest ccc6e87d482b 4 weeks ago 64.2MB

4 给镜像打tag

  1. root@station:/home/ubuntu# docker tag ubuntu:latest 192.168.100.2:5000/ubuntu:v1
  2. root@station:/home/ubuntu# docker images
  3. REPOSITORY TAG IMAGE ID CREATED SIZE
  4. registry latest 708bc6af7e5e 3 weeks ago 25.8MB
  5. 192.168.100.2:5000/centos latest 470671670cac 4 weeks ago 237MB
  6. 192.168.100.2:5000/ubuntu v1 ccc6e87d482b 4 weeks ago 64.2MB
  7. ubuntu latest ccc6e87d482b 4 weeks ago 64.2MB

各个选项说明:

  • REPOSITORY:表示镜像的仓库源
  • TAG:镜像的标签
  • IMAGE ID:镜像ID
  • CREATED:镜像创建时间
  • SIZE:镜像大小

5 push镜像到私有仓库

  1. root@station:/home/ubuntu# docker push 192.168.100.2:5000/ubuntu:v1
  2. The push refers to repository [192.168.100.2:5000/ubuntu]
  3. f55aa0bd26b8: Pushed
  4. 1d0dfb259f6a: Pushed
  5. 21ec61b65b20: Pushed
  6. 43c67172d1d1: Pushed
  7. v1: digest: sha256:bc025862c3e8ec4a8754ea4756e33da6c41cba38330d7e324abd25c8e0b93300 size: 1152

6 删除镜像

  1. # docker rmi ubuntu
  2. Untagged: ubuntu:latest
  3. Untagged: ubuntu@sha256:8d31dad0c58f552e890d68bbfb735588b6b820a46e459672d96e585871acc110
  4. # docker images
  5. REPOSITORY TAG IMAGE ID CREATED SIZE
  6. registry latest 708bc6af7e5e 3 weeks ago 25.8MB
  7. 192.168.100.2:5000/centos latest 470671670cac 4 weeks ago 237MB
  8. 192.168.100.2:5000/ubuntu v1 ccc6e87d482b 4 weeks ago 64.2MB

二、容器使用

01、客户端

  1. docker info

普通用户没有权限使用docker命令,解决办法如下:

  1. $ sudo usermod -a -G docker $USER

02、获取镜像

  1. $ docker pull ubuntu

04、启动容器

  1. $ docker run -it ubuntu /bin/bash

参数说明:

  • -i:交互式操作
  • -t:终端
  • -d:后台运行
  • /bin/bash:交互式shell
  • —name xx 容器命令。
    要退出终端,直接输入exit

05、启动已停止的容器

查看所有容器

  1. $ docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. c71871814c2c ubuntu "/bin/bash" About a minute ago Up About a minute p2
  4. 9c0ff19d41cf ubuntu "/bin/bash" 6 minutes ago Up 6 minutes mystifying_sanderson
  5. 298b49f13231 ubuntu "/bin/bash" 9 minutes ago Exited (0) 6 minutes ago stoic_panini
  6. cd346770502e nginx:v3 "nginx -g 'daemon of?? 16 hours ago Up 16 hours 0.0.0.0:9090->80/tcp nginx-a
  7. 989c06a3787a nginx:v3 "nginx -g 'daemon of?? 16 hours ago Exited (0) 16 hours ago nginx-add
  8. 9bceda5808a0 nginx:v3 "nginx -g 'daemon of?? 16 hours ago Up 16 hours 0.0.0.0:9000->80/tcp nginx-cc
  9. 8c9ae55b917b nginx:v3 "-p 8081:80" 16 hours ago Created 80/tcp nginx-cp

使用docker start 启用一个停止的容器

  1. $ docker start 298b49f13231
  2. 298b49f13231
  3. 查看容器是否启动成功
  4. $ docker ps
  5. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  6. 298b49f13231 ubuntu "/bin/bash" 11 minutes ago Up 12 seconds stoic_panini

06、后台运行

  1. $ docker run -itd --name ubuntu-test ubuntu /bin/bash
  2. 6542fc525dfb99a3f6ed946f22748be011a510a79336d05528c945a577eb14ad
  3. $ docker ps
  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5. 6542fc525dfb ubuntu "/bin/bash" 4 seconds ago Up 3

通过-d 参数指定后台运行

07、停止一个容器

  1. $ docker stop <容器 ID> or 容器 name>

08、进入容器

在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:

  • docker attach
  • docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。

attach 命令

  1. $ docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. c71871814c2c ubuntu "/bin/bash" 19 minutes ago Up
  4. $ docker attach c7

注意: 如果从这个容器退出,会导致容器的停止。

exec 命令

  1. $ docker exec -it p2 /bin/bash
  2. root@c71871814c2c:/#
  3. root@c71871814c2c:/# exit
  4. exit
  5. $ docker ps
  6. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  7. c71871814c2c ubuntu "/bin/bash" 21 minutes ago Up 21 minutes p2

09、导入导出容器

导出容器

  1. $ docker export c7 > Bhanv.tar
  2. $ ls
  3. Bhanv.tar
  4. $ du -sh Bhanv.tar
  5. 64M Bhanv.tar

导入容器

  1. $ cat Bhanv.tar | docker import - ubuntu:v1
  2. sha256:563b8ef3e19c5e87d9511055b3ea9d0e6ddf9abce47404a7e4edff6abf9e4ea2
  3. $ docker images
  4. REPOSITORY TAG IMAGE ID CREATED SIZE
  5. ubuntu v1 563b8ef3e19c About a minute ago 64.2MB

此外,也可以通过url 或某个目录来导入

  1. 第一种方法:通过url 导入
  2. $ docker import http://example.com/exampleimage.tgz example/imagerepo
  3. 第二种方法:通过某个目录来导入
  4. $ docker import ./Bhanv.tar ubuntu:v2
  5. sha256:c579a2149b472d9415d458de9845da851425605181141ca1965f28ab9364f94c
  6. $ docker images
  7. REPOSITORY TAG IMAGE ID CREATED SIZE
  8. ubuntu v2 c579a2149b47 5 seconds ago 64.2MB

10 、删除容器

  1. $ docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. c71871814c2c ubuntu "/bin/bash" 34 minutes ago Up 34 minutes p2
  4. 9c0ff19d41cf ubuntu "/bin/bash" 38 minutes ago Up 38 minutes mystifying_sanderson
  5. $ docker rm -f c7 ---- 指定ID
  6. c7
  7. $ docker rm -f mystifying_sanderson ----指定name
  8. mystifying_sanderson
  9. $ docker ps
  10. ubuntu@station:~/docker$

11、清除所有处于终止状态的容器

$ docker container prune

1、查询终止状态的容器

  1. $ docker ps -a | grep -v "Up"
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. b805023a5cb3 ubuntu "/bin/bash" 20 minutes ago Exited (0) 20 minutes ago ubuntu-test1
  4. 6542fc525dfb ubuntu "/bin/bash" 22 minutes ago Exited (0) 20 minutes ago ubuntu-test
  5. 989c06a3787a nginx:v3 "nginx -g 'daemon of?? 17 hours ago Exited (0) 17 hours ago nginx-add
  6. 8c9ae55b917b nginx:v3 "-p 8081:80" 17 hours ago Created 80/tcp nginx-cp
  7. 4dbf00cfd8a2 nginx:v1 "nginx -g 'daemon of?? 21 hours ago Exited (0) 17 hours ago great_taussig
  8. 5b609c85f789 nginx:v1 "-p 80:8080" 21 hours ago Created 80/tcp cranky_wiles
  9. 740d912c06b8 registry "/entrypoint.sh /etc?? 25 hours ago Exited (2) 25 hours ago peaceful_mcnulty
  10. 8d609af51785 registry "/entrypoint.sh /etc?? 25 hours ago Exited (2) 25 hours ago xenodochial_mirzakhani
  11. b46739ab5fb3 registry "/entrypoint.sh /etc?? 25 hours ago Exited (2) 25 hours ago clever_proskuriakova

2、清除终止状态的容器

  1. $ docker container prune
  2. WARNING! This will remove all stopped containers.
  3. Are you sure you want to continue? [y/N] y
  4. Deleted Containers:
  5. b805023a5cb3dd9986a47e6f0b040997cf46a24082fe6d59aee7e5f60d86b4af
  6. 6542fc525dfb99a3f6ed946f22748be011a510a79336d05528c945a577eb14ad
  7. 989c06a3787af851611463f5a2c40d99d350cef9fcd4dce066538a46b85e2a55
  8. 8c9ae55b917ba25b572566f780036455eb91a853f4ce65ef8158175540d2c94d
  9. 4dbf00cfd8a2e56fff4c406a055af17f00a00776173506bf6d4c9db132945424
  10. 5b609c85f78925cc7576bb28b4a5c5e85d9225eea5efd3f8fd9e614c31267bff
  11. 740d912c06b876964010947b1e95f04a418740d33dbb660815697421b8d4b323
  12. 8d609af51785ad9e122b312cb88f546981671a82c84adacf05d58a9c0ca710ce
  13. b46739ab5fb308f1cb44dc5c3f6500d07a969e8c2493ea9e5b34326cfdf51623
  14. Total reclaimed space: 0B

3、确认是否清除成功

  1. $ docker ps -a | grep -v "Up"
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

三、Dockerfile详解

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

1、使用Dockerfile定制镜像

1.1 FROM 和 RUN 指令的作用

1、定制nginx镜像(构建好的镜像内会有一个 /usr/share/nginx/html/index.html 文件)

  1. cat Dockerfile
  2. FROM nginx
  3. RUN echo "<h1> This is test page</h1>" > /usr/share/nginx/html/index.html
  4. root@station:~/docker# docker build -t nginx:v1 .

FROM:定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像。后续的操作都是基于 nginx

RUN:用于执行后面跟着的命令行命令。有以下俩种格式:

  • shell 格式: RUN <命令行命令>
  • exec 格式 : RUN [“可执行文件”, “参数1”, “参数2”]

2、bulid 镜像

  1. root@station:~/docker# docker build -t nginx:v1 .
  2. Sending build context to Docker daemon 2.048kB
  3. Step 1/2 : FROM nginx
  4. latest: Pulling from library/nginx
  5. bc51dd8edc1b: Pull complete
  6. 66ba67045f57: Pull complete
  7. bf317aa10aa5: Pull complete
  8. Digest: sha256:ad5552c786f128e389a0263104ae39f3d3c7895579d45ae716f528185b36bc6f
  9. Status: Downloaded newer image for nginx:latest
  10. ---> 2073e0bcb60e
  11. Step 2/2 : RUN echo "<h1> This is test page</h1>" > /usr/share/nginx/html/index.html
  12. ---> Running in 71bfbf7d2448
  13. Removing intermediate container 71bfbf7d2448
  14. ---> 37b298849642
  15. Successfully built 37b298849642
  16. Successfully tagged nginx:v1
  17. root@station:~/docker#

启动nginx docker 镜像

  1. 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/协议 —-> 属主主机端口

  1. # docker port nginx
  2. 80/tcp -> 0.0.0.0:8080

1.2 COPY 指令

从上下文目录中复制文件或者目录到容器里指定路径

  1. COPY [--chown=<user>:<group>] <源路径1>... <目标路径>

<源路径>:源文件或者源目录,这里可以是通配符表达式,其通配符规则要满足 Go 的 filepath.Match 规则。例如:

  1. COPY hom* /mydir/
  2. COPY hom?.txt /mydir/

<目标路径>:容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建。

docker cp 命令用法

  1. root@station:~/docker# docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 4dbf00cfd8a2 nginx:v1 "nginx -g 'daemon of?? 7 minutes ago Up 7 minutes 80/tcp great_taussig
  4. 16c3d177d220 registry "/entrypoint.sh /etc?? 3 hours ago Up 3 hours 0.0.0.0:5000->5000/tcp priceless_khorana
  5. root@station:~/docker# docker cp 4dbf00cfd8a2:/usr/share/nginx/html/index.html /root/docker/index.html^C
  6. root@station:~/docker# pwd
  7. /root/docker
  8. root@station:~/docker# ls
  9. Dockerfile
  10. root@station:~/docker# docker cp 4dbf00cfd8a2:/usr/share/nginx/html/index.html /root/docker/index.html
  11. root@station:~/docker# ls
  12. Dockerfile index.html
  13. root@station:~/docker# cat index.html
  14. <h1> This is test page</h1>
  15. root@station:~/docker#

example:

Dockerfile:

  1. root@station:~/docker# cat Dockerfile
  2. FROM nginx
  3. COPY index.html /usr/share/nginx/html/index.html

build docker

  1. root@station:~/docker# docker build -t nginx:v3 .
  2. Sending build context to Docker daemon 15.87kB
  3. Step 1/2 : FROM nginx
  4. ---> 2073e0bcb60e
  5. Step 2/2 : COPY index.html /usr/share/nginx/html/index.html
  6. ---> 851c58b3ab7c
  7. Successfully built 851c58b3ab7c
  8. Successfully tagged nginx:v3

run docker

  1. # docker run --name nginx-cc -d -p 9000:80 nginx:v3
  2. # docker port nginx-cc
  3. 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 指令,仅最后一个生效。

格式:

  1. CMD <shell 命令>
  2. CMD ["<可执行文件或命令>","<param1>","<param2>",...]
  3. CMD ["<param1>","<param2>",...] # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数

推荐使用第二种格式,执行过程比较明确。第一种格式实际上在运行的过程中也会自动转换成第二种格式运行,并且默认可执行文件是 sh。

1.5 ENTRYPOINT

类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。

但是, 如果运行 docker run 时使用了 —entrypoint 选项,此选项的参数可当作要运行的程序覆盖 ENTRYPOINT 指令指定的程序。

优点:在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需的参数。

注意:如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。

格式:

  1. ENTRYPOINT ["<executeable>","<param1>","<param2>",...]

可以搭配 CMD 命令使用:一般是变参才会使用 CMD ,这里的 CMD 等于是在给 ENTRYPOINT 传参,以下示例会提到。

示例:

假设已通过 Dockerfile 构建了 nginx:test 镜像:

  1. FROM nginx
  2. ENTRYPOINT ["nginx", "-c"] # 定参
  3. CMD ["/etc/nginx/nginx.conf"] # 变参

1、不传参运行

  1. $ docker run nginx:test

容器内会默认运行以下命令,启动主进程。

  1. nginx -c /etc/nginx/nginx.conf

2、传参运行

  1. $ docker run nginx:test -c /etc/nginx/new.conf

容器内会默认运行以下命令,启动主进程(/etc/nginx/new.conf:假设容器内已有此文件)

  1. nginx -c /etc/nginx/new.conf

1.6 ENV

设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。

格式:

  1. ENV <key> <value>
  2. ENV <key1>=<value1> <key2>=<value2>...

以下示例设置 NODE_VERSION = 7.2.0 , 在后续的指令中可以通过 $NODE_VERSION 引用:

  1. ENV NODE_VERSION 7.2.0
  2. RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz" \
  3. && curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc"

1.7 ARG

构建参数,与 ENV 作用一至。不过作用域不一样。ARG 设置的环境变量仅对 Dockerfile 内有效,也就是说只有 docker build 的过程中有效,构建好的镜像内不存在此环境变量。

构建命令 docker build 中可以用 —build-arg <参数名>=<值> 来覆盖。

格式:

  1. ARG <参数名>[=<默认值>]

1.8 VOLUME

定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。

作用:

  • 避免重要的数据,因容器重启而丢失,这是非常致命的。
  • 避免容器不断变大。

格式:

  1. VOLUME ["<路径1>", "<路径2>"...]
  2. VOLUME <路径>

在启动容器 docker run 的时候,我们可以通过 -v 参数修改挂载点。

1.9 EXPOSE

仅仅只是声明端口。

作用:

  • 帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射。
  • 在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。

格式:

  1. EXPOSE <端口1> [<端口2>...]

2.0 WORKDIR

指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。(WORKDIR 指定的工作目录,必须是提前创建好的)。

docker build 构建镜像过程中的,每一个 RUN 命令都是新建的一层。只有通过 WORKDIR 创建的目录才会一直存在。

格式:

  1. WORKDIR <工作目录路径>

2.1 USER

用于指定执行后续命令的用户和用户组,这边只是切换后续命令执行的用户(用户和用户组必须提前已经存在)。

格式:

  1. USER <用户名>[:<用户组>]

2.2 HEALTHCHECK

用于指定某个程序或者指令来监控 docker 容器服务的运行状态。

格式:

  1. HEALTHCHECK [选项] CMD <命令>:设置检查容器健康状况的命令
  2. HEALTHCHECK NONE:如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令
  3. HEALTHCHECK [选项] CMD <命令> : 这边 CMD 后面跟随的命令使用,可以参考 CMD 的用法。

2.3 ONBUILD

用于延迟构建命令的执行。简单的说,就是 Dockerfile 里用 ONBUILD 指定的命令,在本次构建镜像的过程中不会执行(假设镜像为 test-build)。当有新的 Dockerfile 使用了之前构建的镜像 FROM test-build ,这是执行新镜像的 Dockerfile 构建时候,会执行 test-build 的 Dockerfile 里的 ONBUILD 指定的命令。

格式:

  1. ONBUILD <其它指令>

四、部署应用示例

01、安装ubuntu

1、查看ubuntu版本

https://hub.docker.com/_/ubuntu?tab=tags&page=1

2、拉取最新版的镜像

  1. $ docker pull ubuntu
  2. Using default tag: latest
  3. latest: Pulling from library/ubuntu
  4. Digest: sha256:8d31dad0c58f552e890d68bbfb735588b6b820a46e459672d96e585871acc110
  5. Status: Image is up to date for ubuntu:latest
  6. docker.io/library/ubuntu:latest

3、查看本地镜像

  1. $ docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. ubuntu latest ccc6e87d482b 4 weeks ago 64.2MB

4、运行容器,并且可以通过 exec 命令进入 ubuntu 容器

  1. $ docker run -itd --name u1 ubuntu:latest
  2. f282a4a089f5c5ec40fbbe986288832c332f53b042eddf61cdb4252e268ac4ac
  3. $ docker exec -it u1 /bin/bash
  4. root@f282a4a089f5:/# uname -a
  5. 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
  6. root@f282a4a089f5:/#

5、安装成功

  1. $ docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 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)

  1. $ docker pull centos:centos7

3、查看本地镜像

  1. $ docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. ubuntu latest ccc6e87d482b 4 weeks ago 64.2MB
  4. centos centos7 5e35e350aded 3 months ago 203MB

4、运行容器,并通过exec进入容器

  1. $ docker run -itd --name c1 centos:centos7
  2. 7504336e39fb85833f141300c6d6c08fd42baca20e95ea0ca52d20a3e652e927
  3. $ docker exec -it c1 /bin/bash
  4. [root@7504336e39fb /]# uname -a
  5. [root@7504336e39fb /]# cat /etc/redhat-release
  6. CentOS Linux release 7.7.1908 (Core)

5、安装成功

  1. ubuntu@station:~$ docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 7504336e39fb centos:centos7 "/bin/bash" About a minute ago Up About a minute c1
  4. 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镜像

  1. $ docker pull nginx:latest

3、查看本地镜像

  1. $ docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. nginx latest 2073e0bcb60e 2 weeks ago 127MB

4、运行容器

  1. $ docker run --name n1 -v /home/ubuntu/docker/:/usr/share/nginx/html -d -p 8080:80 nginx

5、安装成功

  1. ubuntu@station:~$ docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 970908bec021 nginx "nginx -g 'daemon of?? 28 seconds ago Up 27 seconds 0.0.0.0:8080->80/tcp n1

输出测试内容

  1. $ 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 命令来查看可用版本:

  1. ubuntu@station:~/docker$ docker search mysql
  2. NAME DESCRIPTION STARS OFFICIAL AUTOMATED
  3. mysql MySQL is a widely used, open-source relation?? 9137 [OK]
  4. mariadb MariaDB is a community-developed fork of MyS?? 3235 [OK]
  5. mysql/mysql-server Optimized MySQL Server Docker images. Create?? 676 [OK]
  6. centos/mysql-57-centos7 MySQL 5.7 SQL database server 68
  7. mysql/mysql-cluster Experimental MySQL Cluster Docker images. Cr?? 62
  8. centurylink/mysql Image containing mysql. Optimized to be link?? 61 [OK]
  9. deitch/mysql-backup REPLACED! Please use http://hub.docker.com/r?? 41 [OK]
  10. bitnami/mysql Bitnami MySQL Docker Image 35 [OK]
  11. tutum/mysql Base docker image to run a MySQL database se?? 34

2、拉取 MySQL 镜像
这里我们拉取官方的最新版本的镜像:

  1. $ 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`