1. Docker简介
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Docker的主要应用场景:
-
Web 应用的自动化打包和发布。
-
自动化测试和持续集成、发布。
-
在服务型环境中部署和调整数据库或其他的后台应用。
- 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
2. Docker的核心概念
通过上面的架构图了解Docker的核心组件及作用:
- docker主机(Host):安装了Docker程序的机器(Docker直接安装在操作系统之上);
- docker客户端(Client):连接docker主机进行操作;
- docker仓库(Registry):用来保存各种打包好的软件镜像;
- docker容器(Container):镜像启动后的实例称为一个容器;容器是独立运行的一个或一组应用。
- 安装Docker;
- 去Docker仓库找到这个软件对应的镜像;
- 使用Docker运行这个镜像,这个镜像就会生成一个Docker容器;
- 对容器的启动停止就是对软件的启动停止。
3. 安装Docker
采用CentOs7.4对Docker进行安装的操作,记录如下:
首先进行内核版本检查,必须是3.10及以上
之后进行Docker 的安装
1. 安装docker yum install docker 2. 输入y确认安装 3. 启动docker [root@izbp1cq2wdg9kxunr0sz02z ~]# systemctl start docker [root@izbp1cq2wdg9kxunr0sz02z ~]# docker -v Docker version 1.13.1, build 8633870/1.13.1 4. 设置开机启动docker [root@izbp1cq2wdg9kxunr0sz02z ~]# systemctl enable docker Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service. 5. 停止docker [root@izbp1cq2wdg9kxunr0sz02z ~]# systemctl stop docker
4. Docker镜像操作
当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。
4.1 镜像检索
镜像检索实际上是从https://hub.docker.com/检索,根据列出的镜像名称来进行后续的拉取操作。也可以直接到该网站搜索相关镜像直接拉取。
[root@izbp1cq2wdg9kxunr0sz02z ~]# docker search redis INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.io/redis Redis is an open source key-value store th... 5999 [OK] docker.io docker.io/bitnami/redis Bitnami Redis Docker Image 94 [OK] ···
- NAME:镜像仓库源的名称
- DESCRIPTION:镜像的描述
- OFFICIAL:是否docker官方发布
- AUTOMATED:是否自动构建
4.2 镜像拉取
[root@izbp1cq2wdg9kxunr0sz02z ~]# docker pull redis Using default tag: latest Trying to pull repository docker.io/library/redis ... latest: Pulling from docker.io/library/redis f17d81b4b692: Pull complete b32474098757: Pull complete 8980cabe8bc2: Pull complete 2719bdbf9516: Pull complete f306130d78e3: Pull complete 3e09204f8155: Pull complete Digest: sha256:481678b4b5ea1cb4e8d38ed6677b2da9b9e057cf7e1b6c988ba96651c6f6eff3 Status: Downloaded newer image for docker.io/redis:latest
默认拉取最新版本的镜像,如果需要拉取特定的版本号的软件镜像,在拉取命令的镜像名后面通过 :版本号 的方式进行拉取。
如果担心下载速度慢,可以到国内的网易镜像中心https://c.163yun.com/hub#/m/home/进行查找,大部分基本软件镜像在这里都能够找到,相应的拉取命令在镜像库中也能看到。
4.3 镜像列表
列出本地主机上的镜像。
[root@izbp1cq2wdg9kxunr0sz02z ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/redis latest 1babb1dde7e1 2 weeks ago 94.9 MB
- REPOSITORY:表示镜像的仓库源
- TAG:镜像的标签(版本)
- IMAGE ID:镜像ID
- CREATED:镜像创建时间
- SIZE:镜像大小
4.4 镜像删除
[root@izbp1cq2wdg9kxunr0sz02z ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/redis latest 1babb1dde7e1 2 weeks ago 94.9 MB [root@izbp1cq2wdg9kxunr0sz02z ~]# docker rmi 1babb1dde7e1 Untagged: docker.io/redis:latest Untagged: docker.io/redis@sha256:481678b4b5ea1cb4e8d38ed6677b2da9b9e057cf7e1b6c988ba96651c6f6eff3 Deleted: sha256:1babb1dde7e1fc7520ce56ce6d39843a074151bb192522b1988c65a067b15e96 Deleted: sha256:68f3c8e2388da48dd310e4642814feca68081445635716be58d7ebb69b611922 Deleted: sha256:b18dd54614f34239abc8a1165c90d5416a413d1f4c3c6711648e49e26e4445e7 Deleted: sha256:bf9efae34b1e94384b8cd011cf71591efab734b57961017bad608be56b7b1c9c Deleted: sha256:7ae66985fd3a3a132fab51b4a43ed32fd14174179ad8c3041262670523a6104c Deleted: sha256:bf45690ef12cc54743675646a8e0bafe0394706b7f9ed1c9b11423bb5494665b Deleted: sha256:237472299760d6726d376385edd9e79c310fe91d794bc9870d038417d448c2d5 [root@izbp1cq2wdg9kxunr0sz02z ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE [root@izbp1cq2wdg9kxunr0sz02z ~]#
5. 容器操作
当运行下载的软件镜像时,就会产生一个容器,此容器即代表一个正在运行的软件。
1. 搜索镜像 docker search tomcat 2. 拉取镜像 docker pull tomcat [root@izbp1cq2wdg9kxunr0sz02z ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/tomcat latest ca9e2fccef98 4 days ago 463 MB 3. 根据镜像运行容器 [root@izbp1cq2wdg9kxunr0sz02z ~]# docker run --name mytomcat -d tomcat:latest 5ae1e2cf28623a66dea99c40ad8cef564a681591507f5723fafca73242f63c51 4. 查看运行中的容器 [root@izbp1cq2wdg9kxunr0sz02z ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5ae1e2cf2862 tomcat:latest "catalina.sh run" 13 seconds ago Up 13 seconds 8080/tcp mytomcat 5. 查看所有容器 [root@izbp1cq2wdg9kxunr0sz02z ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5ae1e2cf2862 tomcat:latest "catalina.sh run" 28 seconds ago Up 28 seconds 8080/tcp mytomcat 6. 停止运行中的容器 [root@izbp1cq2wdg9kxunr0sz02z ~]# docker stop 5ae1e2cf2862 5ae1e2cf2862 [root@izbp1cq2wdg9kxunr0sz02z ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@izbp1cq2wdg9kxunr0sz02z ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5ae1e2cf2862 tomcat:latest "catalina.sh run" 2 minutes ago Exited (143) 35 seconds ago mytomcat 7. 启动容器 [root@izbp1cq2wdg9kxunr0sz02z ~]# docker start 5ae1e2cf2862 5ae1e2cf2862 [root@izbp1cq2wdg9kxunr0sz02z ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5ae1e2cf2862 tomcat:latest "catalina.sh run" 5 minutes ago Up 7 seconds 8080/tcp mytomcat [root@izbp1cq2wdg9kxunr0sz02z ~]# docker stop 5ae1e2cf2862 5ae1e2cf2862 8. 删除容器 [root@izbp1cq2wdg9kxunr0sz02z ~]# docker rm 5ae1e2cf2862 5ae1e2cf2862 [root@izbp1cq2wdg9kxunr0sz02z ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@izbp1cq2wdg9kxunr0sz02z ~]#
需要注意的是,我们启动容器中的某个端口并不能自动映射到虚拟机上对应的端口,即按照上面的方式启动容器之后,访问虚拟机ip:8080是不能访问到tomcat的,这需要我们在运行容器时做一下端口的映射:
[root@izbp1cq2wdg9kxunr0sz02z ~]# docker run -d -p 8888:8080 tomcat 57546c6c4ac4f7386bbb2f682734bd4cd10025cee6fa124fdec70909964e8c51 [root@izbp1cq2wdg9kxunr0sz02z ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 57546c6c4ac4 tomcat "catalina.sh run" 7 seconds ago Up 5 seconds 0.0.0.0:8888->8080/tcp practical_meitner
- -d:后台运行
- -p: 将主机的端口映射到容器的一个端口 主机端口:容器内部的端口
查看容器日志,可通过名称或镜像id [root@izbp1cq2wdg9kxunr0sz02z ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 57546c6c4ac4 tomcat "catalina.sh run" 7 seconds ago Up 5 seconds 0.0.0.0:8888->8080/tcp practical_meitner [root@izbp1cq2wdg9kxunr0sz02z ~]# docker logs practical_meitner 03-Nov-2018 13:32:57.183 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version: Apache Tomcat/8.5.34 03-Nov-2018 13:32:57.185 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Sep 4 2018 22:28:22 UTC ···
其他命令不再一一介绍,可参考博客:
更多命令参考:https://docs.docker.com/engine/reference/commandline/docker/ 。