Docker学习

Docker

一、命令

提示:

镜像:mysql/tomcat/nginx等这些产品都是一个镜像,同一个产品不同的版本也是不同的镜像
容器:mysql/tomcat/nginx等这些产品运行的实例就是一个容器
每一个镜像都有一个镜像ID,每一个容器都有一个容器ID,镜像的操作都可以用ID操作

1.查看docker版本

  • docker -v
xiefeideMacBook-Pro:~ xiefei$ docker -v
Docker version 18.06.1-ce, build e68fc7a
  • docker version
xiefeideMacBook-Pro:~ xiefei$ docker version
Client:
 Version:           18.06.1-ce
 API version:       1.38
 Go version:        go1.10.3
 Git commit:        e68fc7a
 Built:             Tue Aug 21 17:21:31 2018
 OS/Arch:           darwin/amd64
 Experimental:      false

Server:
 Engine:
  Version:          18.06.1-ce
  API version:      1.38 (minimum version 1.12)
  Go version:       go1.10.3
  Git commit:       e68fc7a
  Built:            Tue Aug 21 17:29:02 2018
  OS/Arch:          linux/amd64
  Experimental:     true

2.查看docker 系统信息

  • docker info
xiefeideMacBook-Pro:~ xiefei$ docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 18.06.1-ce
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true

3.docker搜索镜像

  • docker search 镜像名
xiefeideMacBook-Pro:~ xiefei$ docker search mysql
NAME     	 DESCRIPTION        STARS               OFFICIAL            AUTOMATED
mysql  	 	 MySQL is a …   	7034                [OK]                
mariadb 	 MariaDB is …   	2251                [OK]                

NAME:镜像的名字 DESCRIPTION:描述 STARS:镜像个数

OFFICIAL:是否官方镜像 AUTOMATED:自动构建

4.拉取或更新镜像

  • docker pull 镜像名 下载对应的最新版本的镜像
xiefeideMacBook-Pro:~ xiefei$ docker pull mysql  # 这里没有加版本,默认拉取最新版本
Using default tag: latest  # 使用最新版本
latest: Pulling from library/mysql
802b00ed6f79: Pull complete 
30f19a05b898: Pull complete 
3e43303be5e9: Pull complete 
94b281824ae2: Pull complete 
51eb397095b1: Pull complete 
54567da6fdf0: Pull complete 
bc57ddb85cce: Pull complete 
d6cd3c7302aa: Pull complete 
d8263dad8dbb: Pull complete 
780f2f86056d: Pull complete 
8e0761cb58cd: Pull complete 
7588cfc269e5: Pull complete 
Digest: sha256:038f5f6ea8c8f63cfce1bce9c057ab3691cad867e18da8ad4ba6c90874d0537a
Status: Downloaded newer image for mysql:latest # 提示下载成功,版本是最新版

  • docker pull 镜像名:版本号 下载对应版本号的镜像
 xiefeideMacBook-Pro:~ xiefei$ docker pull mysql:5.6 # 下载指定版本 :版本号
5.6: Pulling from library/mysql
802b00ed6f79: Already exists 
30f19a05b898: Already exists 
3e43303be5e9: Already exists 
94b281824ae2: Already exists 
51eb397095b1: Already exists 
3f6fe5e46bae: Pull complete 
b5a334ca6427: Pull complete 
115764d35d7a: Pull complete 
719bba2efabc: Pull complete 
284e66788ee1: Pull complete 
0f085ade122c: Pull complete 
Digest: sha256:4c44f46efaff3ebe7cdc7b35a616c77aa003dc5de4b26c80d0ccae1f9db4a372
Status: Downloaded newer image for mysql:5.6
  • docker pull -a 镜像名 下载对所有版本的镜像
 xiefeideMacBook-Pro:~ xiefei$ docker -a mysql # 下载所有镜像名为mysql的镜像(所有版本)
  • docker pull --disable-content-trust 镜像名[:版本号] 下载镜像,忽略镜像的校验,默认开启的
xiefeideMacBook-Pro:~ xiefei$ docker pull --disable-content-trust tomcat
Using default tag: latest
latest: Pulling from library/tomcat
05d1a5232b46: Pull complete 
5cee356eda6b: Pull complete 
89d3385f0fd3: Pull complete 
65dd87f6620b: Pull complete 
78a183a01190: Pull complete 
1a4499c85f97: Pull complete 
2c9d39b4bfc1: Pull complete 
1b1cec2222c9: Pull complete 
fc95b85a81f3: Pull complete 
0f3868647539: Pull complete 
9b6a6eddb2d9: Pull complete 
8787183cb077: Pull complete 
Digest: sha256:8d120de5102cc12310de741299e9bf6f39d2d674663f2ce4e6f0f181ccfeebe7
Status: Downloaded newer image for tomcat:latest

5.登录或退出镜像仓库

  • docker login -u 账号 -p 密码 登录到docker仓库
xiefeideMacBook-Pro:~ xiefei$ docker login -u 我的账号 -p 账户密码
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Login Succeeded		# 提示登录成功
  • docker login 登录到docker仓库
xiefeideMacBook-Pro:~ xiefei$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: docker账户用户名 # 这里输入用户名
Password: 				 # 密码的输入是隐藏的
Login Succeeded
  • docker logout 从docker仓库退出登录
xiefeideMacBook-Pro:~ xiefei$ docker logout
Removing login credentials for https://index.docker.io/v1/

6.上传自己的镜像到docker仓库

7.查看本地镜像

  • docker images 查看本地的镜像
xiefeideMacBook-Pro:~ xiefei$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tomcat              latest              41a54fe1f79d        2 weeks ago         463MB
mysql               5.6                 1f47fade220d        3 weeks ago         256MB
mysql               latest              6a834f03bd02        3 weeks ago         484MB

REPOSITORY:本地镜像 TAG:镜像版本

IMAGE ID:镜像ID CREATED:仓库中的镜像最后生成时间

SIZE:镜像大小

  • docker images --digests 查看镜像并显示镜像摘要信息
xiefeideMacBook-Pro:~ xiefei$ docker images --digests
REPOSITORY       TAG       DIGEST       IMAGE ID         CREATED             SIZE
tomcat           latest    sha256:8...  41a54fe1f79d     2 weeks ago        463MB
mysql            5.6       sha256:4...  1f47fade220d     3 weeks ago        256MB

参数:

-a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);

--digests :显示镜像的摘要信息;

-f :显示满足条件的镜像;

--format :指定返回值的模板文件;

--no-trunc :显示完整的镜像信息;

-q :只显示镜像ID。

8.删除镜像

  • docker rmi 镜像名[:版本号] 删除对应的镜像,不加版本号默认为最新版本latest
xiefeideMacBook-Pro:~ xiefei$ docker rmi mysql
Untagged: mysql:latest
Untagged: mysql@sha256:038f5f6ea8c8f63cfce1bce9c057ab3691cad867e18da8ad4ba6c90874d0537a
Deleted: sha256:6a834f03bd02bb88cdbe0e289b9cd6056f1d42fa94792c524b4fddc474dab628
Deleted: sha256:7c5fa90085d2a84db64c17365d10f5b53a5aa706268f638a907d1201e1bed152
Deleted: sha256:6d0978f641c5d7d23caf78f1c9684a012e2ae57d470ece8445762c3477680de7
Deleted: sha256:2f28bef8ce4a6d89c30b7ace59cfc5b588326c2557512ca407a30a757e536fbd
Deleted: sha256:310bec32d59e1c6c90a0f4c626f82e4af855d2e62e08b5c57537024eb8913662
Deleted: sha256:4156c6921920d628b3d2fcb90a9a42aae34aeb8a5ad633b360410c8b4d19f8be
Deleted: sha256:fbc7ead994165d335460ed07333e915f0856ba7338e81a023533db9b818897b9
Deleted: sha256:92b67fef00b7a1aa0e4bdde90098cd8c3099b7a2c8c37b49f05a26ebe351c634
  • docker rmi -f 镜像名[:版本号] 强制删除镜像
xiefeideMacBook-Pro:~ xiefei$ docker rmi -f tomcat:latest
Untagged: tomcat:latest
Untagged: tomcat@sha256:8d120de5102cc12310de741299e9bf6f39d2d674663f2ce4e6f0f181ccfeebe7
Deleted: sha256:41a54fe1f79d99b1fd47941099fca93845f81431a937f4530031aede21817c10
Deleted: sha256:873d54bee34eb121f4ff0b3b45e07dd6dda0ffe92348b7213eff833c8a0e6d8d
Deleted: sha256:4661e5c14ebb7a638390adafe4fb476502447a56b379ef7cd588a84ec9ea9237
Deleted: sha256:1e796ff1c5b4805025ae5e6b1f67c2fb9fa1ea9d49edc85ff0cc1ab2d600a037
Deleted: sha256:ff74d0217859d0f014b1fd174a8cb22f34f8cf24833ea973cfc05110b9e5edff
Deleted: sha256:eb25282c86a6f048cf9c766b6456d074ce22952ace1573d090852e460d448a91
Deleted: sha256:ace97896118c74c99d4555445966e9e16b7e7f7670fde53d33d9753b84f4247f
Deleted: sha256:a9de2214d67d0d7bf40e88e646bb75e3a95cd21c614121449c2873ab4236f41c
Deleted: sha256:0e3c6dece00c9e96b98787480de7c821a1cf7a7ac33883e0b6a386c2b22d285f
Deleted: sha256:be985ef6c5ce96739cbe924702dc83fa1c05b0635178cf939985ead10ca4177f
Deleted: sha256:54a32bd7a949afcfc50488df9a48db13f5bfc63c282a09db4aa2fb499012c21f
Deleted: sha256:7d5f2843cac2368781293d71139c6c30fbb6b7029f6fd4424da858e7f2772875
Deleted: sha256:b28ef0b6fef80faa25436bec0a1375214d9a23a91e9b75975bba3b2889f8504f

9.docker tag

10.docker build

11.查看镜像创建记录

  • docker history 镜像名[:版本]
xiefeideMacBook-Pro:~ xiefei$ docker history mysql:5.6
IMAGE          CREATED      CREATED BY                                     SIZE    COMMENT
1f47fade220d   3 weeks ago  /bin/sh -c #(nop)  CMD ["mysqld"]  				0B                  
<missing>      3 weeks ago  /bin/sh -c #(nop)  EXPOSE 3306/tcp              0B                  
<missing>      3 weeks ago  /bin/sh -c #(nop)  ENTRYPOINT ["docker-entry…   0B                  
<missing>      3 weeks ago  /bin/sh -c ln -s usr/local/bin/docker-entryp…   34B                 
<missing>      3 weeks ago  /bin/sh -c #(nop) COPY file:b79e447a4154d715…   6.31kB              
<missing>      3 weeks ago  /bin/sh -c #(nop)  VOLUME [/var/lib/mysql]      0B                  
-H :以可读的格式打印镜像大小和日期,默认为此选项。

--no-trunc :显示完整的提交记录,默认为截断的记录。

-q :仅列出提交记录ID。

12.docker save

13.docker import

14.创建并运行镜像

  • docker run 镜像名[:tag]
可行先参数:
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;

-d: 后台运行容器,并返回容器ID;

-i: 以交互模式运行容器,通常与 -t 同时使用;

-p: 端口映射,格式为:主机(宿主)端口:容器端口

-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

--name="nginx-lb": 为容器指定一个名称;

--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;

--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;

-h "mars": 指定容器的hostname;

-e username="ritchie": 设置环境变量;

--env-file=[]: 从指定文件读入环境变量;

--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;

-m :设置容器使用内存最大值;

--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;

--link=[]: 添加链接到另一个容器;

--expose=[]: 开放一个端口或一组端口;

以mysql为例,启动mysql,参考docker hub:https://hub.docker.com/_/mysql/

xiefeideMacBook-Pro:~ xiefei$ docker run --name docker_mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
e6c44dcb136e778bb0c82a47f0104682bef37a3d37c910e5580e00f8eb9b15b4

上面的例子,-e MYSQL_ROOT_PASSWORD=123456 指定mysql的密码,但是由于没有做端口映射,是访问到这个mysql的

xiefeideMacBook-Pro:~ xiefei$ docker run --name mysql01 -d -e MYSQL_ROOT_PASSWORD=123456 -p 3366:3306 mysql:5.6 # 启动mysql,映射容器的3306到本机的3366端口
7d29428c2f35e846ff61ba1e83d72371f830ce413aa10124cb54b00b292e274f
xiefeideMacBook-Pro:~ xiefei$ docker ps # 查看启动的容器
CONTAINER ID IMAGE     COMMAND      CREATED  STATUS       PORTS                    NAMES
7d29428c2f35 mysql:5.6 "docker..."  3...	 Up 2 seconds 0.0.0.0:3366->3306/tcp   mysql01
容器id        镜像和tag  指令			创建时间  当前状态		映射端口信息				 容器名

使用mysql客户端连接本地的3366端口,可以连上。

15.查看当前正在运行的镜像

  • docker ps
xiefeideMacBook-Pro:~ xiefei$ docker ps # 查看启动的容器
CONTAINER ID IMAGE     COMMAND      CREATED  STATUS       PORTS                    NAMES
7d29428c2f35 mysql:5.6 "docker..."  3...	 Up 2 seconds 0.0.0.0:3366->3306/tcp   mysql01
容器id        镜像和tag  指令			创建时间  当前状态		映射端口信息				 容器名
  • docker ps -a
xiefeideMacBook-Pro:~ xiefei$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                    NAMES
7d29428c2f35        mysql:5.6           "docker-entrypoint.s…"   8 minutes ago       Up 8 minutes                0.0.0.0:3366->3306/tcp   mysql01
cb30bb5417e2        mysql:5.6           "docker-entrypoint.s…"   14 minutes ago      Exited (1) 14 minutes ago                            msyql01
e6c44dcb136e        mysql:5.6           "docker-entrypoint.s…"   18 minutes ago      Exited (0) 10 minutes ago                            docker_mysql

参数:
-a :显示所有的容器,包括未运行的。

-f :根据条件过滤显示的内容。

--format :指定返回值的模板文件。

-l :显示最近创建的容器。

-n :列出最近创建的n个容器。

--no-trunc :不截断输出。

-q :静默模式,只显示容器编号。

-s :显示总的文件大小。

16.获取镜像元数据信息

  • docker inspect 镜像[:tag]
xiefeideMacBook-Pro:~ xiefei$ docker inspect mysql:5.6
[
    {
        "Id": "sha256:1f47fade220d0ddedb916156cf4d7121a020afff03c19b4638ac494c5d1eca63",
        "RepoTags": [
            "mysql:5.6"
        ],
        "RepoDigests": [
            "mysql@sha256:4c44f46efaff3ebe7cdc7b35a616c77aa003dc5de4b26c80d0ccae1f9db4a372"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2018-09-05T00:39:51.203690679Z",
        "Container": "c7c47484b32bdd307c295836f7e5834aead7a1180f34eb1d4072b1cd309ed80a",
        "ContainerConfig": {
            "Hostname": "c7c47484b32b",
            "Domainname": "",
            # 省略....
            

17.查看容器进程信息

xiefeideMacBook-Pro:~ xiefei$ docker top mysql01
PID                 USER                TIME                COMMAND
3910                999                 0:01                mysqld

18.进入正在运行中的容器

  • docker attach 容器名[:tag]
docker attach f3530e02a550
[root@f3530e02a550 /]# 
  • docker exec 参数 容器名[:tag]
xiefeideMacBook-Pro:~ xiefei$ docker exec -it mysql01 /bin/bash 
root@7d29428c2f35:/# mysql -uroot -p123456 # 里已经进入了mysql的终端,可以执行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 3
Server version: 5.6.41 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, 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 |
+--------------------+
3 rows in set (0.00 sec)

mysql> 

# 可以使用exit退出对应的终端
参数:
-d :分离模式: 在后台运行

-i :即使没有附加也保持STDIN 打开

-t :分配一个伪终端

19.查看docker 事件

  • docker event

参数:

-f :根据条件过滤事件;

--since :从指定的时间戳后显示所有事件;

--until :流水时间显示到指定的时间为止;

执行时带上时间参数,ctrl c可以退出

xiefeideMacBook-Pro:~ xiefei$ docker events --since="2018-10-01"
2018-10-02T14:24:31.733275500+08:00 image pull mysql:latest (name=mysql)
2018-10-02T14:26:17.773049900+08:00 image pull mysql:5.6 (name=mysql)
2018-10-02T14:39:06.967491000+08:00 image pull tomcat:latest (name=tomcat)
xiefeideMacBook-Pro:~ xiefei$ docker events -f "image"="mysql:5.6" --since="2018-10-01"
2018-10-02T14:26:17.773049900+08:00 image pull mysql:5.6 (name=mysql)
2018-10-02T20:07:05.264814800+08:00 image pull mysql:5.6 (name=mysql)

20.查看容器日志

  • docker logs 容器名[:tag]
xiefeideMacBook-Pro:~ xiefei$ docker logs mysql01
Initializing database
2018-10-02 12:24:46 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2018-10-02 12:24:46 0 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap.
2018-10-02 12:24:46 0 [Note] /usr/sbin/mysqld (mysqld 5.6.41) starting as process 38 ...
2018-10-02 12:24:46 38 [Note] InnoDB: Using atomics to ref count buffer pool pages
2018-10-02 12:24:46 38 [Note] InnoDB: The InnoDB memory heap is disabled
2018-10-02 12:24:46 38 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins

参数:

-f : 跟踪日志输出

--since :显示某个开始时间的所有日志

-t : 显示时间戳

--tail :仅列出最新N条容器日志
xiefeideMacBook-Pro:~ xiefei$ docker logs -f --tail 4 mysql01
LLA             : init_queue:139
LUA             : init_queue:149
WOC             : NO
Next activation : never
# -f 跟踪日志输出,并只输出4条日志

21.阻塞运行直到容器停止

  • docker wait 容器名[:tag]

22.容器导出

  • docker export

参数:**-o ?*将输入内容写到文件。

xiefeideMacBook-Pro:repository xiefei$ docker export -o mysql.tar mysql01
xiefeideMacBook-Pro:repository xiefei$ ls
mysql.tar

23.查看容器端口映射

  • docker port 容器名[:tag] 查看容器端口映射情况
xiefeideMacBook-Pro:docker xiefei$ docker port mysql01
3306/tcp -> 0.0.0.0:3366  # 3306 映射到本机的3366端口

24.容器的启动、重启和停止

  • docker start/restart/stop 容器名[:tag]
xiefeideMacBook-Pro:docker xiefei$ docker stop mysql01 # 停止容器
mysql01
xiefeideMacBook-Pro:docker xiefei$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
xiefeideMacBook-Pro:docker xiefei$ docker start mysql01 # 启动容器
mysql01
xiefeideMacBook-Pro:docker xiefei$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
7d29428c2f35        mysql:5.6           "docker-entrypoint.s…"   About an hour ago   Up 3 seconds        0.0.0.0:3366->3306/tcp   mysql01
xiefeideMacBook-Pro:docker xiefei$ docker restart mysql01 # 重启容器
mysql01
xiefeideMacBook-Pro:docker xiefei$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
7d29428c2f35        mysql:5.6           "docker-entrypoint.s…"   About an hour ago   Up 3 seconds        0.0.0.0:3366->3306/tcp   mysql01

25.杀死一个运行中的容器

  • docker kill 容器名[:tag]
xiefeideMacBook-Pro:docker xiefei$ docker kill mysql01
mysql01

参数:-s 向容器发送一个信息

26.删除一个或多个容器

  • docker rm 容器[:tag]
xiefeideMacBook-Pro:docker xiefei$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                         PORTS               NAMES
7d29428c2f35        mysql:5.6           "docker-entrypoint.s…"   About an hour ago   Exited (137) 10 minutes ago                        mysql01
cb30bb5417e2        mysql:5.6           "docker-entrypoint.s…"   About an hour ago   Exited (1) About an hour ago                       msyql01
e6c44dcb136e        mysql:5.6           "docker-entrypoint.s…"   About an hour ago   Exited (0) About an hour ago                       docker_mysql
xiefeideMacBook-Pro:docker xiefei$ docker rm e6c44dcb136e  # 删除容器
e6c44dcb136e
xiefeideMacBook-Pro:docker xiefei$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                         PORTS               NAMES
7d29428c2f35        mysql:5.6           "docker-entrypoint.s…"   About an hour ago   Exited (137) 11 minutes ago                        mysql01
cb30bb5417e2        mysql:5.6           "docker-entrypoint.s…"   About an hour ago   Exited (1) About an hour ago                       msyql01

27.暂停或启用容器

  • docker pause / unpause 容器[:tag]
xiefeideMacBook-Pro:docker xiefei$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
7d29428c2f35        mysql:5.6           "docker-entrypoint.s…"   About an hour ago   Up 55 seconds       0.0.0.0:3366->3306/tcp   mysql01
xiefeideMacBook-Pro:docker xiefei$ docker pause mysql01  # 暂停mysql01这个容器的运行
mysql01
xiefeideMacBook-Pro:docker xiefei$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                       PORTS                    NAMES
7d29428c2f35        mysql:5.6           "docker-entrypoint.s…"   About an hour ago   Up About a minute (Paused)   0.0.0.0:3366->3306/tcp   mysql01
xiefeideMacBook-Pro:docker xiefei$ docker unpause mysql01 # 暂停启用
mysql01
xiefeideMacBook-Pro:docker xiefei$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
7d29428c2f35        mysql:5.6           "docker-entrypoint.s…"   About an hour ago   Up 2 minutes        0.0.0.0:3366->3306/tcp   mysql01
xiefeideMacBook-Pro:docker xiefei$ 

28.创建容器

  • docker create … 创建一个容器,但不运行,用法同docker run
xiefeideMacBook-Pro:docker xiefei$ docker create --name mysql02 -p 3333:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6
31695ec08729c5c379ab65685ae5bac3a1e2dd26f928102b9dc57d47ef2740f2
xiefeideMacBook-Pro:docker xiefei$ docker ps -a
CONTAINER ID    IMAGE      COMMAND        CREATED   	  STATUS    PORTS     NAMES
31695ec08729    mysql:5.6  "docker..."    14 seconds ago  Created             mysql02

29.docker commit

docker commit -a ‘作者’ -m ‘提交信息’ 容器id 要生成的镜像名:tag
把当前容器制作成一个镜像
需求:新建一个tomcat容器,提供一个/demo/demo.html供访问,然后制作成镜像,这个镜像运行的容器就可以直接访问这个demo.html

# 查看所有镜像
root@ubuntu:/home/xf/docker# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              fce289e99eb9        10 days ago         1.84kB
tomcat              latest              1a51cb5e3006        12 days ago         462MB
mysql               latest              102816b1ee7d        13 days ago         486MB
centos              latest              1e1148e4cc2c        5 weeks ago         202MB
# 运行tomcat镜像
root@ubuntu:/home/xf/docker# docker run --name inittomcat -i -t -p 8888:8080 tomcat
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
# 进入容器bash 
root@ubuntu:/home/xf/docker# docker exec -i -t inittomcat /bin/bash
# 在webapps目录下构建可访问的html页面
root@fcbb0331dff6:/usr/local/tomcat# pwd
/usr/local/tomcat
root@fcbb0331dff6:/usr/local/tomcat# mkdir webapps/demo
root@fcbb0331dff6:/usr/local/tomcat# echo "hello docker" >> webapps/demo/demo.html
# ctrl+q+p退出容器bash ,创建镜像
root@ubuntu:/home/xf/docker# docker commit -a 'xf' -m '自定义tomcat' inittomcat my/tomcat
sha256:9b518f156443b70c5ebdf7d6a7fdee30687516cb73e3fdb8d082479a732637ef
# 查看镜像,刚才创建的镜像已存在
root@ubuntu:/home/xf/docker# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
my/tomcat           latest              9b518f156443        5 seconds ago       463MB
# 启动当前镜像
root@ubuntu:/home/xf/docker# docker run --name mytomcat -p 9999:8080 my/tomcat
# 访问demo.html就能看到之前的html文件也能访问的

30.docker cp

docker cp 容器id:文件路径 本机路径
复制容器中文件到本机

# 新建一个centos容器,并在容器中新建/test/day.log
root@ubuntu:/home/xf/docker# docker run --name mycentos -i -t centos
[root@e8cbdab6aae1 /]# mkdir /test
[root@e8cbdab6aae1 /]# cd /test/
[root@e8cbdab6aae1 test]# echo "hello" >> day.log
# ctrl+q+p退出容器
root@ubuntu:/home/xf/docker# docker cp e8cbdab6aae1:/test/day.log ./
root@ubuntu:/home/xf/docker# ls
# 文件已复制到当前文件夹下了
day.log


31.docker diff


二、未完侍续…

docker容器卷

将本机中某一目录和docker容器中的目录挂载到一起:

$ docker run --name myos -i -t -v /Users/xiefei/Documents/workspace/docker/v1:/v1 centos

上面这个命令将本机的/Users/xiefei/Documents/workspace/docker/v1这个目录和容器/v1这个目录挂在到一起了,可以进行容器和本机的文件传输,两个目录文件同步。

dockerfile容器卷使用

新建dockerfile文件(没有后缀),内容如下:

FROM centos
# 定义了两个容器卷
VOLUME ["/dvolume1","/dvolume2"]
CMD echo "finished .... success"
CMD /bin/bash   

通过dockers build命令构建:

# -f 就是要构建的文件的位置 -t 就是构建后镜像的名字和 tag
$ docker build -f ./dockerfile -t my/os .

运行这个镜像:

 $ docker run -it my/os
[root@e64e934d77fb /]#

查看镜像中的内容:

[root@e64e934d77fb /]# ll
total 64
-rw-r--r--   1 root root 12076 Dec  5 01:37 anaconda-post.log
lrwxrwxrwx   1 root root     7 Dec  5 01:36 bin -> usr/bin
drwxr-xr-x   5 root root   360 Jan 13 04:40 dev
# 这里就是dockerfile中指定的容器卷
drwxr-xr-x   2 root root  4096 Jan 13 04:40 dvolume1
drwxr-xr-x   2 root root  4096 Jan 13 04:40 dvolume2
drwxr-xr-x   1 root root  4096 Jan 13 04:40 etc
# 省略...
[root@e64e934d77fb /]# 

查看容器信息:

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
e64e934d77fb        my/os               "/bin/sh -c /bin/bash"   3 minutes ago       Up 3 minutes                            hardcore_cori
$ docker inspect e64e934d77fb
# 省略... 只关注Mounts
"Mounts": [
            {
                "Type": "volume",
                "Name": "ab14171bd39c27346962762a8dcf74d7ba47f39bd3dbb554f2c99b64b825492a",
                "Source": "/var/lib/docker/volumes/ab14171bd39c27346962762a8dcf74d7ba47f39bd3dbb554f2c99b64b825492a/_data",
                "Destination": "/dvolume1",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            },
            {
                "Type": "volume",
                "Name": "a11302652bea89ae7900f8aa3e9add8db82af20a1577366328a2c4a8bfadb4ee",
                "Source": "/var/lib/docker/volumes/a11302652bea89ae7900f8aa3e9add8db82af20a1577366328a2c4a8bfadb4ee/_data",
                "Destination": "dvolume2",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
# 省略...

通过上面的信息,可以发现,刚运行的这个容器中的容器卷/dvolume1挂载在本机的/var/lib/docker/volumes/ab14171bd39c27346962762a8dcf74d7ba47f39bd3dbb554f2c99b64b825492a/_data这个目录下,dvolume2挂载在本机/var/lib/docker/volumes/a11302652bea89ae7900f8aa3e9add8db82af20a1577366328a2c4a8bfadb4ee/_data这个目录下。本机目录是docker默认生成的。
在macos上直接进入上述目录会报错找不到目录,可按以下方式操作

$ cd ~/Library/Containers/com.docker.docker/Data/vms/0/
$ screen tty

然后再执行cd命令到自定目录去。

多容器间通过容器卷数据共享

创建上面镜像实例:

$ docker run --name d1 -it my/os
[root@b1870947cc26 /]# 

–volume-from指定容器卷绑定:

$ docker run --name d2 -it --volumes-from d1 my/os
[root@63bf813b9031 /]# ls  

这样两个容器的中的容器卷相互绑定,可以传输数据了。
可以通过这种方式进行多个容器绑定。只要绑定了任何两个容器之间都可以传输数据,即使删除了任意的容器。比如 B --valumes-from A 创建的,C --valumes-from B创建的 即使删除了B,A和C也能进行数据传输。

DockerFile解析

reids的dockerfile文件

# 要依赖的镜像
FROM debian:stretch-slim

# RUN 构建时执行的指令
RUN groupadd -r redis && useradd -r -g redis redis

# 设置构建过程中的环境变量
ENV GOSU_VERSION 1.10
RUN set -ex; \
	# 省略....
RUN set -ex; \
	\
	buildDeps=' \
		# 省略....
# 运行REDIS后进入/bin/bash后的目录
WORKDIR /data

COPY docker-entrypoint.sh /usr/local/bin/
ENTRYPOINT ["docker-entrypoint.sh"]

EXPOSE 6379
CMD ["redis-server"]

保留命令

FROM: 基础镜像,当前镜像要依赖的镜像
MAINTAINER: 镜像维护者的姓名和邮箱地址
RUN: 构建时运行的命令
EXPOSE: 当前容器对外暴露的端口
WORKDIR: 容器运行进入/bin/bash的默认目录
ENV: 构建过程中设置的环境变量
ADD: 拷贝宿主机中的文件,并解压
COPY: 拷贝宿主机中的文件(不解压)
VOLUMES: 设置容器卷
CMD: 要执行的命令,多可命令被覆盖,以最后一个命令为准
ENTRYPOINT: 要执行的命令,多个命令,命令被追加组合
ONBUILD: 当前镜像被子镜像继承后执行

自定义dockerfile

# 继承自centos
FROM centos

# 作者
MAINTAINER xf <11@qq.com>

# 设置环境变量
ENV MYPATH /user/local

# 设置工作目录,进入容器是/bin/bash目录
WORKDIR $MYPATH

# 执行命令,安装vim工具
RUN yum -y install vim

# 向外暴露22端口
EXPOSE 22

CMD echo $MAYPATH
CMD echo "SUCCESS!"
# 运行镜像,最终指向这个命令
CMD /bin/bash

通过docker build 进行构建

docker build -f ./newcentos -t my/newos:1.0 .

运行:

$ docker run -it my/newos:1.0
[root@1581d4667930 local]# pwd
# 可以看到运行时进入的目录在WORKDIR下指定的目录
/user/local
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值