Docker入门教程

博客作者:联系请点击,搬运不易,希望请作者喝咖啡,可以点击联系博客作者

Docker 是一个开源的应用容器引擎,而一个容器containers其实是一个虚拟化的独立的环境,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

  • Docker 的局限性之一,它只能用在 64 位的操作系统上。

Docker 从 1.13 版本之后采用时间线的方式作为版本号,分为社区版 CE 和企业版 EE,社区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外的收费服务,比如经过官方测试认证过的基础设施、容器、插件等。

社区版按照 stableedge 两种方式发布,每个季度更新 stable 版本,如 17.0617.09;每个月份更新 edge 版本,如17.0917.10

下面教程运行在 Centos

新版本安装

Docker 官方的安装教程,在这里

安装一些必要的系统工具

添加软件源信息

可选:启用 edgetest 存储库。 这些存储库包含在上面的 docker.repo 文件中,但默认情况下处于禁用状态。您可以将它们与稳定存储库一起启用。

您可以通过使用 --disable 标志运行 yum-config-manager 命令来禁用边缘或测试存储库。 要重新启用它,请使用 --enable 标志。 以下命令禁用 edge 存储库:

安装 Docker-ce

如果你想安装特定 docker-ce 版本,先列出 repo 中可用版本,然后选择安装

启动 Docker 后台服务

通过运行 hello-world 镜像,验证是否正确安装了 docker

旧版本安装

命令介绍

服务管理

镜像管理

镜像可以看做我们平时装系统的镜像,里面就是一个运行环境。

通过容器创建镜像

我们可以通过以下两种方式对镜像进行更改。

  1. 从已经创建的容器中更新镜像,并且提交这个镜像

  2. 使用 Dockerfile 指令来创建一个新的镜像

下面通过已存在的容器创建一个新的镜像。

上面命令参数说明:

  • -m 提交的描述信息

  • -a 指定镜像作者

  • a6b0a6cfdacf 记住这个是容器id,不是镜像id

  • wcjiang/nginx:v1.2.1 创建的目标镜像名

通过Dockerfile创建镜像

假设创建一个 node.js 镜像,首先在 node.js 项目根目录创建文件。

.dockerignore 文件内容,下面代码表示,这三个路径要排除,不要打包进入 image 文件。如果你没有路径要排除,这个文件可以不新建。

Dockerfile 文件内容

  • FROM node:8.4:该 image 文件继承官方的 node image,冒号表示标签,这里标签是8.4,即8.4版本的 node

  • COPY . /app:将当前目录下的所有文件(除了 .dockerignore 排除的路径),都拷贝进入 image 文件的 /app 目录。

  • WORKDIR /app:指定接下来的工作路径为/app

  • RUN npm install:在/app目录下,运行 npm install 命令安装依赖。注意,安装后所有的依赖,都将打包进入 image 文件。

  • EXPOSE 3000:将容器 3000 端口暴露出来, 允许外部连接这个端口。

有了 Dockerfile 文件以后,就可以使用 docker image build 命令创建 image 文件了。

上面命令,-t 参数用来指定 image 文件的名字,后面还可以用冒号指定标签。如果不指定,默认的标签就是 latest。注意后面有个 .,表示 Dockerfile 文件所在的路径为当前路径

发布自己的镜像

  1. Docker 注册账户,发布的镜像都在这个页面里展示

  2. 将上面做的镜像nginx,起个新的名字nginx-test

  1. 登录docker

  1. 上传nginx-test镜像

镜像中安装软件

通常情况下,使用docker官方镜像,如 mysql镜像,默认情况下镜像中啥软件也没有,通过下面命令安装你所需要的软件:

如果你安装了CentOS或者Ubuntu系统可以进入系统安装相关软件

容器管理

容器就像一个类的实例

容器服务管理

进入容器

  1. 创建一个守护状态的Docker容器

  1. 使用docker ps查看到该容器信息

  1. 使用docker exec命令进入一个已经在运行的容器

通常有下面几种方式进入Docker的容器,推荐使用exec,使用attach一直进入失败。

文件拷贝

从主机复制到容器 sudo docker cp host_path containerID:container_path 从容器复制到主机 sudo docker cp containerID:container_path host_path

Docker私有仓库搭建

通过官方提供的私有仓库镜像registry来搭建私有仓库。通过 humpback 快速搭建轻量级的Docker容器云管理平台。关于仓库配置说明请参见configuration.md

⚠️ 注意:也可以通过部署管理工具 Harbor 来部署 registry

除了 Harbor 还有 humpbackrancher

registry

创建容器并运行,创建成功之后,可访问 http://192.168.99.100:7000/v2/,来检查仓库是否正常运行,当返回 {} 时,表示部署成功。

推送镜像到私有仓库

在推送到的时候报错误,默认是使用https提交,这个搭建的默认使用的是 http,解决方法两个:

  1. 创建一个https映射

  2. 将仓库地址加入到不安全的仓库列表中

我们使用第二种方法,加入到不安全的仓库列表中,修改docker配置文件vi /etc/docker/daemon.json 添加 insecure-registries配置信息,如果 daemon.json 文件不存在可以创建,关键配置项,将仓库将入到不安全的仓库列表中。

如果是 macOS 可以通过 docker 客户端,Preferences => Advanced => 添加配置 => Apply & Restart,重启docker就可以了。

重启服务 service docker restart,默认情况下 push 是会报如下错误的:

上面错误是 SELinux 强制访问控制安全系统,阻止导致的错误,通过下面方法禁用 SELinux 之后就可以 push 了。

Harbor

部署 registry 管理工具 Harbor

使用Docker实战

⚠文件挂载注意:docker 禁止用主机上不存在的文件挂载到 container 中已经存在的文件

Nginx

在 docker 中部署 Nginx

MySQL

在 docker 中部署 MySQL

Redis

在 docker 中部署 Redis

Elasticsearch

在 docker 中部署 Elasticsearch

Gitlab

在 docker 中部署 Gitlab

Rocket.Chat

在 docker 中部署 Gitlab

Humpback

首先创建放持久化数据文件夹,mkdir -p /opt/app/humpback-web,里面存放持久化数据文件,会存储站点管理和分组信息,启动后请妥善保存。

访问站点,打开浏览器输入:http://192.168.99.100:7001 ,默认账户:admin 密码:123456

Seafile

更多

更多 docker 工具部署,在 docker 目录中

卸载旧的版本

移除旧的版本

参考资料

官方英文资源

中文资源

其它资源

Last updated

Was this helpful?