Docker 安装完毕我们就能够试着来执行一些命令了看看 docker 能够干什么
(一) 创建一个容器
首先让我们执行一个最简单的容器, hello-world 假设安装没有问题并执行正确的话, 应该会出现下面的结果:
- $ docker run hello-world
- Unable to find image hello-world:latest locally
- latest: Pulling from library/hello-world
- c04b14da8d14: Pull complete
- Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9
- Status: Downloaded newer image for hello-world:latest
- Hello from Docker!
- This message shows that your installation appears to be working correctly.
- To generate this message, Docker took the following steps:
- 1. The Docker client contacted the Docker daemon.
- 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
- 3. The Docker daemon created a new container from that image which runs the
- executable that produces the output you are currently reading.
- 4. The Docker daemon streamed that output to the Docker client, which sent it
- to your terminal.
- To try something more ambitious, you can run an Ubuntu container with:
- $ docker run -it ubuntu bash
- Share images, automate workflows, and more with a free Docker Hub account:
- https://hub.docker.com
- For more examples and ideas, visit:
- https://docs.docker.com/engine/userguide/
能够看到, 上述结果给了我们非常多信息, 首先打印出了一条信息: Hello from Docker!
接着简单描写叙述了一下产生该条信息所经历的一系列步骤:
1 Docker 客户端连接到守护进程
2 Docker 守护进程从 Docker Hub 拉取了 hello-world 镜像
3 Docker 守护进程从该镜像创建了一个容器, 来执行了命令并输出了我们当前看的这条消息
4 Docker 守护进程将容器中的标准输出转发到你的终端
须要补充一点的是, docker 在执行一个容器时首先会检查本地是否存在指定的镜像假设有则直接执行假设没有, 才会去 Docker Hub 上拉取这也就是命令结果第一行为什么会显示
Unable to find imagehello - world: latestlocally
的原因
接下来, 我们能够看一下眼下全部的容器:
- $ docker ps -a
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 1a058b3cde45 hello-world "/hello" 3 minutes ago Exited (0) 3 minutes ago gigantic_austin
能够看到, 仅仅有一个我们刚才创建的 hello-world 容器, 结果显示, 该容器有一个 ID1a058b3cde45, 从 hello-world 镜像创建执行的命令为 / hello, 当前状态为 3 分钟前已退出, 最后还有个 namegigantic_austin, 须要注意的是这里的 name 看着非常奇怪, 由于它是随机生成的, 兴许我们能够看到怎样自己定义容器名称
须要注意的是, 假设你仅仅执行 docker ps 将看不到这个结果由于它默认仅仅显示正在执行的容器而我们的 hello-world 执行完就立刻退出了.
或者你也能够执行 docker ps -l 用于查看最后创建的一个容器
(二) 查看本地镜像:
- $ docker images
- REPOSITORY TAG IMAGE ID CREATED SIZE
- hello-world latest c54a2cc56cbb 9 weeks ago 1.848 kB
docker images 命令能够显示本机全部的 Docker 镜像
(三) 在线查找镜像:
假设你不知道都有哪些可用的镜像在线查找一下也许是个好注意:
直接使用
docker search + [你想查找的镜像关键字]
, 如:
- $ docker search tomcat
- NAME DESCRIPTION STARS OFFICIAL AUTOMATED
- tomcat Apache Tomcat is an open source implementa... 896 [OK]
- dordoka/tomcat Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 ba... 22 [OK]
- consol/tomcat-7.0 Tomcat 7.0.57, 8080, "admin/admin" 16 [OK]
- consol/tomcat-8.0 Tomcat 8.0.15, 8080, "admin/admin" 15 [OK]
- davidcaste/alpine-tomcat Apache Tomcat 7/8 using Oracle Java 7/8 wi... 10 [OK]
- cloudesire/tomcat Tomcat server, 6/7/8 9 [OK]
- ...
结果会默认显示 25 条记录, 通常第一条为官方镜像, 即 Docker Hub 中的镜像官方镜像会在 OFFICIAL 一列显示 [OK] 字样, 另外, STARS 一列的星星数量显示了该镜像的受欢迎程度, 星星越多表明用的人越多, 只是为安全起见通常建议首选官方镜像或自制镜像而不是第三方的
(四) 拉取镜像
使用
docker pull[镜像名称 [: 版本号]]
能够拉取一个镜像:
注: 完整的镜像名称由 [repository]/name:[tag] 构成,[repository]为仓库假设省略, 则默觉得 library, 即从 Docker Hub 拉取; 假设省略 tag, 则默认拉取 latest 版本号 name 为镜像名称不能省略
- $ docker pull tomcat:7
- 7: Pulling from library/tomcat
- 8ad8b3f87b37: Pull complete
- 751fe39c4d34: Pull complete
- b165e84cccc1: Pull complete
- 65f65ec902a1: Pull complete
- c7e29d14c31c: Pull complete
- ae323d020901: Pull complete
- f53151098775: Pull complete
- 4ee50529773d: Pull complete
- e6cd9c8b5720: Pull complete
- 2274405e7ff7: Pull complete
- ba48c8080acc: Pull complete
- Digest: sha256:05749aa3217ba008878ff868de824602aaebcd6250c1510e489dbadb81ee37bd
- Status: Downloaded newer image for tomcat:7
一个好的实践是拉取镜像时, 总是指定一个明白的版本号这样能确保在接下来的使用中, 明白知道使用的是哪个版本号
由于 latest 版本号总是指向最新的版本号, 这将造成不确定性
镜像拉取完毕后我们能够用它创建一个新的 tomcat 容器:
- $ docker run -d --name tomcat001 -p 8081:8080 tomcat:7
- 72d39fb16383dc3ce667de4ea2c12b5c42d6cffdf818c6031fafe88fb6751f0a
当中,-d 指定容器在后台执行; name 用于指定容器的名称;-p 8081:8080 用于将容器内的 8080port 映射到主机的 8081port, 你也能够换成其它本机 port. 假设须要你能够创建多个容器使用, 须要注意的是本机映射的 port 不能反复, name 也不能反复
查看当前容器:
- $ docker ps -l
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 72d39fb16383 tomcat:7 "catalina.sh run" 3 minutes ago Up 3 minutes 0.0.0.0:8081->8080/tcp tomcat001
这时, 我们就能够訪问 192.168.1.132:8081 来查看执行的 tomcat 了, 注意将 IP 替换成你的 docker 主机的 IP
(五) 查看容器日志
使用
docker logs 容器名称
能够查看容器的日志输出,-f 选项能够指定实时输出最新日志相似于 Linux 下的 tail -f 命令
- $ docker logs -f tomcat001
- Sep 05, 2016 10:27:49 AM org.apache.catalina.startup.VersionLoggerListener log
- INFO: Server version: Apache Tomcat/7.0.70
- Sep 05, 2016 10:27:49 AM org.apache.catalina.startup.VersionLoggerListener log
- INFO: Server built: Jun 15 2016 16:27:45 UTC
- Sep 05, 2016 10:27:49 AM org.apache.catalina.startup.VersionLoggerListener log
- INFO: Server number: 7.0.70.0
- Sep 05, 2016 10:27:49 AM org.apache.catalina.startup.VersionLoggerListener log
- INFO: OS Name: Linux
- Sep 05, 2016 10:27:49 AM
- ...
- ...
- INFO: Deployment of web application directory /usr/local/tomcat/webapps/ROOT has finished in 32 ms
- Sep 05, 2016 10:27:49 AM org.apache.coyote.AbstractProtocol start
- INFO: Starting ProtocolHandler ["http-apr-8080"]
- Sep 05, 2016 10:27:49 AM org.apache.coyote.AbstractProtocol start
- INFO: Starting ProtocolHandler ["ajp-apr-8009"]
- Sep 05, 2016 10:27:49 AM org.apache.catalina.startup.Catalina start
- INFO: Server startup in 655 ms
(六) 停止容器
- $ docker stop tomcat001
- tomcat001
(七) 启动容器
- $ docker start tomcat001
- tomcat001
(八)删除容器
删除一个容器前须要先停止容器, 否则须要使用 -f 选项强制删除(不推荐)
另外, 假设容器包括数据卷的话, 能够使用 - v 选项连同关联的数据卷一块删除, 删除容器时, 默认不删除数据卷, 由于数据卷一般会包括我们的数据
- $ docker rm tomcat001
- tomcat001
(九) 卷管理
到这里似乎一切都在容器里我们的应用好像还没怎么跟容器有联系有多种方法能够执行我们的应用, 最简单的就是将应用挂载为容器的一个数据卷另外更常规的做法是直接把应用制作成一个镜像, 方便后期的測试及公布等容器存放数据的地方主要有两个一个是数据卷, 相似于 Linux 下挂载的文件夹还有一个是数据卷容器, 即单独的用于存放数据的容器
关于容器的数据卷及数据卷容器的概念还须要一篇文章讨论, 在此就不做深入研究了
最简单的使用数据卷的方式就是在创建一个容器时 添加 - v 选项, 我们以一个最简单的 Java web 应用为例:
1 首先创建一个文件夹:
- sudo mkdir -p /opt/data/myapp/ROOT
- sudo chown -R $USER:root /opt/data/myapp
注意这里的 $USER 变量代表当前执行 docker 的用户即安装 docker 时添加 docker 组的那个用户, 其它用户可能会导致没权限
2 在 / opt/data/myapp/ROOT 下创建一个 WEB-INF 文件夹:
$ mkdir / opt / data / myapp / ROOT / WEB - INF
3 新建一个 web.xml:
vi / opt / data / myapp / ROOT / WEB - INF / web.xml
贴入下面内容, 保存:
- <?xml version="1.0" encoding="ISO-8859-1" ?>
- <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
- http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0" metadata-complete="true">
- <display-name>
- Welcome to Tomcat
- </display-name>
- <description>
- Welcome to Tomcat
- </description>
- </web-app>
4 新建一个 jsp 页面:
vi / opt / data / myapp / ROOT / index.jsp
贴入下面内容, 保存:
- <!DOCTYPE html>
- <html lang="en">
- </body>
- Hello, this is my first docker app!
- </body>
- </html>
5 接下来, 将我们的应用挂载到容器中:
$ docker run - d--name myapp - v / opt / data / myapp: /usr/local / tomcat / webapps - p 8888 : 8080 tomcat: 7
6 訪问 192.168.1.132:8888 就能够了:
这样的方式也是比較 0 基础的使用方法, 只是在本地开发及測试还是挺方便的在 CI/CD 工作流中, 应该将应用直接制作为镜像关于怎样制作镜像, 请參考兴许文章
(十) 删除镜像
删除一个镜像前, 须要先停止使全部用它的容器, 否则会报错, 或者使用 -f 选项强制删除
- $ docker rmi tomcat:7
- Error response from daemon: conflict: unable to remove repository reference "tomcat:7" (must force) - container e1226ea69332 is using its referenced image c6c14b3960bd
- $ docker rmi tomcat:7
- Untagged: tomcat:7
- Untagged: tomcat@sha256:05749aa3217ba008878ff868de824602aaebcd6250c1510e489dbadb81ee37bd
- Deleted: sha256:967bcc6107b44f28ea76c4448da49d8d12328b39ee7dc48347e833b1d98df143
- Deleted: sha256:d77369462cab111671c3797187b3b7473fc64a6039ec06a02af4376ac588ca5a
- Deleted: sha256:33fcb0e88cc530b74d4081cb3e665000e829d05d5467a0a8a6fe6e9b4aa23ac8
- Deleted: sha256:f08d7b065365610a76636083ac3edf85784ce764fb23f46304953d7e662846ac
- Deleted: sha256:bc8a665ce1da8a10d642cb92864da7f5ca6d81483e20a8dfb5c06c2a1cc6473c
- Deleted: sha256:3a2471d2c021fec5bc630486a8d5fa11a52068dfb4cf3589921775d6213bde2b
- Deleted: sha256:0045842271a87e064b2e8d6b4a560b0eea7b415a80e4d70bb40d6ef247cdb949
- Deleted: sha256:467e4252c9c86603b7c441b50a21b6ebd78f2ac6b0ab0236c3e0eb79c3d06e4e
- Deleted: sha256:fc18fe11190c806227398f634be2865ae447ff677f052ffbbecea27241f961b1
- Deleted: sha256:249266c821ee1779d332c7b7eb496be194109c4b0e99d3adcc4bd3d03cc1167e
- Deleted: sha256:d7afd92fb07236c8a2045715a86b7d5f0066cef025018cd3ca9a45498c51d1d6
- Deleted: sha256:9e63c5bce4585dd7038d830a1f1f4e44cb1a1515b00e620ac718e934b484c938
(完)
来源: http://www.bubuko.com/infodetail-2497178.html