Docker 容器的基本使用

Docker 是用 go 语言开发的开源容器引擎,通过轻量级沙箱机制,让应用之间能够高效地隔离开来。

Docker 镜像将应用以集装箱形式打包,然后就能轻松部署到任意 Linux 服务器中,所以 Docker 容器技术极大地提升了软件交付效率。本文讲述在 Windows 系统上 Docker 容器的基本使用。

Docker 安装

Windows 系统安装 Docker Toolbox,安装完后,会有 Docker Quickstart Terminal 和 Kitematic 两个快捷方式。

Docker Quickstart Terminal 会进入命令行终端,Kitematic 是一个 Docker 的 GUI 工具,可以在图形界面管理 Docker 容器和镜像。

常用的 Docker 命令

进入 Docker Cli 终端执行常用的 Docker 命令,实现容器的 Build, Ship, Run 功能。

1
2
3
4
# 下载镜像
docker pull centos

docker images

docker images 查看本地镜像列表:

也可以在 Kitematic 中查看 Docker 镜像:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 运行一个Docker容器
docker run -d -p 9000:80 nginx

# 查看运行的容器
docker ps

# 进入容器内bash终端
docker exec -it badd967af535 bash

# 关闭Docker容器
docker stop badd967af535

# 关闭所有容器
docker stop $(docker ps -q)

# 删除Docker镜像
docker rmi a47a5669ac57

构建 Docker 镜像

普通应用要构建为 Docker 镜像,需要一个 Dockerfile 文件,它是构建镜像的脚本文件,然后使用 docker build 命令构建镜像。

例如用 Node.js 搭建个人博客,然后构建成名为 node-blog 的镜像。

npm 的 package.json 配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
"name": "node-blog",
"version": "1.0.0",
"author": "Terry",
"description": "My blog,built with Node.js,packaged into docker image",
"repository": {
"type": "git",
"url": "https://github.com/yunTerry/node-blog"
},
"license": "MIT",
"main": "app.js",
"scripts": {
"start": "node app.js"
},
"dependencies": {
"express": "latest"
},
"keywords": [
"Node.js",
"Docker"
]
}

只开启一个静态网页服务,应用主体 app.js 只有几行代码:

1
2
3
4
5
6
7
8
const express = require('express');
const app = express();

app.use(express.static(__dirname + '/blog'));

app.listen(80, () => {
console.log('已启动 http://<your-ip>');
});

编写 Dockerfile 文件:

1
2
3
4
5
6
7
8
9
FROM node:lts-alpine
MAINTAINER Terry <2219569347@qq.com>

WORKDIR /terry
COPY . .
RUN npm install --registry=https://registry.npm.taobao.org

CMD ["npm","start"]
EXPOSE 80

构建 Docker 镜像:

1
docker build -t yunterry/node-blog .

构建完成后通过 docker images 可以看到该镜像。

Docker Hub 镜像托管

Docker Hub 可以免费托管和分享 Docker 镜像,类似于 GitHub

把 node-blog 镜像 push 到 Docker Hub:

1
2
3
4
5
# 登录Docker Hub
docker login

# 上传镜像
docker push yunterry/node-blog

然后在 Docker Hub 官网就可以搜到该镜像:

https://hub.docker.com/r/yunterry/node-blog

可以发现,Docker 镜像仓库的设计思想与 git 如出一辙,使用方法也基本类似。

运行镜像

Docker 的好处是不用担心开发和生产环境不一致的问题,容器保证运行效果一致性,在另一台主机上运行博客镜像:

1
2
3
4
5
# 从远程仓库下载镜像
docker pull yunterry/node-blog

# 运行node-blog镜像
docker run --rm -p 80:80 yunterry/node-blog

浏览器打开 http://192.168.99.100

示例代码

https://github.com/yunTerry/node-blog