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