Docker Tutorial

本文记录常用Docker命令的使用及含义。

Docker简明使用教程

本文章主要记录笔者一天对Docker命令使用的初级探究,记录常用命令的使用方式及其含义以做备忘。

一些概念

以下只是列出仓库、镜像和容器的简单解释。

仓库

用于存放镜像的地方,最大的仓库为Docker Hub,类比于Github。

镜像

用于创建容器的模板,可以理解为面向对象的类。

容器

真实用来跑应用的实体,可以理解为面向对象的对象。

命令操作

镜像

创建

镜像的创建方式有多种,可以:

  1. 直接从官方仓库拉取,比如:docker pull ubuntu:16.04,其中ubuntu为library/ubuntu的缩写,表示官方维护的;16.04表示镜像的标签,如果省掉则为latest表示最近的标签。

  2. 通过Dockerfile创建,比如:docker build -t ifpelset/test .,注意最后的有一个.代表Dockerfile的路径为当前路径,要保持当前路径没有其他文件,不然docker会拷贝这些文件到镜像。Dockerfile案例如下:

1
2
3
4
5
6
7
FROM ubuntu:16.04 # 构建的源
RUN apt-get update # RUN 后面代表要执行的shell命令
# 其他的安装配置 ...
EXPOSE 22 # 表示暴露给外部host的端口号
ENTRYPOINT /usr/bin/myapp -x # ENTRYPOINT表示该容器启动后启动的应用

关于ENTRYPOINT:存在CMD与其有相同的作用,但是笔者使用没有达到效果,推荐使用ENTRYPOINT;因为一旦一个容器没有存活的进程,docker容器进程也将退出,如果你是启动服务或者使用后台运行,请在后面加上&& bash。如:ENTRYPOINT service ssh start && bash 在容器启动的时候直接启动sshd服务。
可以直接使用docker run -d –name container_name image_name [app params] 实现创建一个容器,并且在启动容器时候自动运行app。从而达到与ENTRYPOINT相同的效果且不需要去单独编写Dockerfile并build。

  1. 通过tar文件创建,比如:docker load -i xxxx.tar,其中xxxx.tar文件为通过docker save导出的。

  2. 通过从容器commit创建,比如:docker commit -m “message” container_name image_name:tag,类比于git commit

导出

由于DockerHub的访问速度很慢,一般将私有的镜像导出为tar文件,部署到目标机器。使用命令:docker save -o xxxx.tar image_name:tag

删除

删除镜像可以使用命令docker rmi image_name:tag,如果遇到删除失败,请使用-f选项。

查看

查看本机有哪些镜像,可以使用命令docker images,即可列出。

容器

创建

创建容器可以使用命令docker run达到效果,这里简单列出几个使用案例:

  1. 创建一个容器并提供一个交互的shell以及做一个端口映射,命令如下:
1
docker run -it --name "container name" -p host_port:container_port image_name:tag /bin/bash

其中:

1
2
3
4
-i: 提供标准输入
-t: 提供一个虚拟终端
-name: 容器名字
-p:运行容器的主机端口到容器端口的映射
  1. 创建一个容器并后台执行,对于已经指定容器启动就运行应用来说很适用,命令如下:
1
docker run -d --name "container name" -p host_port:container_port image_name:tag

其中:

1
-d: 以后台运行的方式运行容器

如果遇到容器中的应用需要mount之类的操作,请在命令中加入–privileged选项。

删除

删除容器可以使用命令docker rm container_name,如果遇到删除失败,请使用-f选项。

查看

查看本机存在哪些容器,可以通过docker ps -a,其中-a会列出所有的容器(包括没用运行的)。

启动

可以通过命令docker start container_name启动容器。

停止

可以通过命令docker stop container_name停止容器。

自动启动

要实现容器在主机重启之后自动重启,可以将该容器作为systemd服务,并加入开机启动。service样例如下:

1
2
3
4
5
6
7
8
9
10
11
12
# vim /etc/systemd/system/imsc-nodes-container.service
[Unit]
Description=imsc nodes container
After=docker.service
[Service]
Restart=always
ExecStart=/usr/bin/docker start -a imsc-nodes-container
ExecStop=/usr/bin/docker stop -t 2 imsc-nodes-container
[Install]
WantedBy=local.target

然后通过命令systemctl enable imsc-nodes-container.service即可加入开机自启。

参考链接

  1. Docker Tutorial,runoob
  2. How to automatically start a service when running a docker container?,mtmacdonald
  3. CHAPTER 3. USING SYSTEMD WITH CONTAINERS,redhat

2017-9-22 于 成都

文章目录
  1. 1. Docker简明使用教程
    1. 1.1. 一些概念
      1. 1.1.1. 仓库
      2. 1.1.2. 镜像
      3. 1.1.3. 容器
    2. 1.2. 命令操作
      1. 1.2.1. 镜像
        1. 1.2.1.1. 创建
        2. 1.2.1.2. 导出
        3. 1.2.1.3. 删除
        4. 1.2.1.4. 查看
      2. 1.2.2. 容器
        1. 1.2.2.1. 创建
        2. 1.2.2.2. 删除
        3. 1.2.2.3. 查看
        4. 1.2.2.4. 启动
        5. 1.2.2.5. 停止
        6. 1.2.2.6. 自动启动
  2. 2. 参考链接