Docker 入门教程

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。Docker是内核虚拟化,不使用Hypervisor是不完全虚拟化,依赖内核的特性实现资源隔离。本文主要介绍Docker 入门教程。

1、Docker 安装

安装配置Docker的方法步骤,以及配置Docker镜像加速的方法,可以参考如下文档,

参考文档:

Linux CentOS Docker 安装与配置

Linux Ubuntu Docker 安装与配置

Linux Debian Docker 安装与配置

Linux Fedora Docker 安装与配置

Linux Raspberry Pi Docker 安装与配置

Mac Docker 安装与配置

Windows Docker 安装与配置

2、Docker 镜像

Docker 把应用程序及其依赖,打包在 image 文件里面。只有通过这个文件,才能生成 Docker 容器。image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。image 是二进制文件。一个 image 文件可以通过继承另一个 image 文件,在结合实现需求进行自定义配置。一般来说,为了节省时间,应该尽量使用别人制作好的 image 文件,而不是自己制作。即使要定制,也应该基于别人的 image 文件进行加工,而不是从零开始制作。image 文件制作完成后,可以上传到Docker Hub。Docker 的官方仓库 Docker Hub 是最重要,最常用的 image 仓库。

1)搜索镜像

docker search <镜像名>

例如,

搜索linux相关镜像:

docker search linux

2)获取镜像

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

选项说明

选项

作用

-a, --all-tags

拉取所有 tagged 镜像

--disable-content-trust 

忽略镜像的校验,默认开启

-q, --quiet

概要输出

--platform string

若服务支持多平台,这里可以设置平台

TAG:标签,不写的话默认是 latest 最新版

@DIGEST:不可变的标识符。

例如,

$ docker pull ubuntu:14.04
14.04: Pulling from library/ubuntu
5a132a7e7af1: Pull complete
fd2731e4c50c: Pull complete
28a2f68d1120: Pull complete
a3ed95caeb02: Pull complete
Digest: sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
Status: Downloaded newer image for ubuntu:14.04

其中@DIGEST就是上面描述中的sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2,则拉取可以使用如下命令:

docker pull ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2

3)列出镜像

docker images [OPTIONS] [REPOSITORY[:TAG]]

使用docker images可以列出已经下载的镜像,参数如下:

-a, --all

列出所有镜像 (默认隐藏中间层镜像)

--digests

显示镜像的摘要信息

-f, --filter <filter>

显示满足条件的镜像

--format <string>

使用 Go 模板语法列出镜像

--no-trunc

不截断输出,显示完整镜像信息

-q, --quiet

只显示镜像 ID

4)删除镜像

docker rmi <镜像名>

例如,

docker rmi ubuntu:16.04

3、Docker 容器

Docker 容器是根据 image 文件生成的实例。同一个 image 文件,可以生成多个同时运行的容器实例。

1)创建并启动容器

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

参考选项如下表:

-t

让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上

-i

附加到容器的标准输入(进入交互模式)

-d, --detach

在后台启动容器

--name

为容器指定一个名称

-P

随机端口映射

-p

指定端口映射。如 -p 8080:80 表示将宿主机的8080端口映射到容器的80端口

--net

指定网络模式,该选项有以下可选参数:

--net=brige:默认选项,表示连接到默认的网桥

--net=host:容器使用宿主机的网络(该模式下-p参数无效)

--net=container:<容器名称或id>:让容器使用已有容器的网络配置

--net=none:不使用该容器的网络,用户可以自定义网络配置

例如,

docker run -d -p 8080:80 --name=mynginx nginx

2)停止容器

docker stop <容器名称或id>

-t, --time <int>:停止前等待的时间,默认为 10(单位:秒)

例如,

docker stop mynginx

3)启动停止的容器

docker start <容器名称或id>

参数如下:

-a, --attach:附加到容器的标准输出

-i:附加到容器的标准输入(进入交互模式)

例如,

docker start mynginx

4)重启容器

docker restart <容器名称或id>

参数如下:

-t, --time <int>:停止前等待的时间,默认为 10(单位:秒)

例如,

docker restart mynginx

5)进入容器

进入容器并启动bash命令:

docker exec -it <容器名称或id> /bin/bash

例如,

docker exec -it mynginx /bin/bash

6)删除容器

docker rm <容器名称或id>

参数如下:

-f, --force:强制删除正在运行的容器(使用 SIGKILL)

-l, --link:删除指定的链接

-v, --volumes:删除与容器关联的卷

例如,

删除mynginx容器:

docker rm mynginx

删除所有停止的容器:

docker rm $(docker ps -a -q)

4、传输文件

Docker容器和主机之间可能需要传输文件,可以使用docker cp 实现相互文件传输。

1)将容器文件拷贝至主机

docker cp <容器名称或id>:<容器中文件路径> <宿主机中目标路径>

例如,

docker cp mynginx:/tmp/cjavapy.json ~/dir

2)将主机文件拷贝至容器

docker cp <文件路径> <容器名称或id>:<容器中文件目标路>

例如,

docker cp ~/dir/index.cfg mynginx:/tmp

5、hello-world实例

使用docker run命令具有自动拉取hello-world 镜像。如果发现本地没有指定的 image 文件,就会从仓库自动抓取。可以先使用docker pull拉取镜像。

$ docker run hello-world
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.
    (amd64)
 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 ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/

输出上面提示之后,hello-world容器会停止运行,容器自动终止。

注意docker logs命令用来查看 docker 容器的输出,即容器里面 Shell 的标准输出。如果docker run命令运行容器时,没有使用-it参数,就要用这个命令查看输出。


推荐阅读
cjavapy编程之路首页