Docker教程

Docker教程

1. Docker是什么?

Docker是Linux容器的一种封装,提供简单易用的容器使用接口。
Docker将应用程序与该程序的依赖打包在一个文件里,运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样,有了Docker就不用担心环境问题。

2. Docker的用途

  • 提供一次性的环境;
  • 提供弹性的云服务;
  • 组件微服务架构。

3. Docker的安装

安装流程详见官方文档;
安装完成之后,运行一下命令验证安装是否成功:

docker version  # 查看docker版本
docker info  # 查看docker信息

Docker需要用户具有sudo权限,为避免每次输入命令都输入sudo,可以把用户加入Docker用户组:

sudo usermod -aG docker $USER

Docker是一种C/S架构,启动Docker的命令:

sudo service docker start

sudo systemctl start docker

4. 运行Docker

4.1 Docker Hello World

Docker允许在容器内运行应用程序,使用docker run命令在容器中运行一个应用程序

# Docker 以ubuntu 15.10镜像创建一个新容器,并在容器中执行命令/bin/echo echo "Hello World!",然后输出结果
$ docker run ubuntu:15.10 /bin/echo "Hello World!"
Hello World!

4.2 运行交互式的容器

可以通过docker的两个参数 -i -t,运行一个可交互式的容器:

  • -t 在新容器中指定一个伪终端或者终端
  • -i 允许用户对容器内的标准输入(stdin)进行交互
$ docker run -i -t ubuntu:15.10 /bin/bash
root@0123ce118bd8:/# 
# 注意,此时已经进入了一个ubuntu 15.10系统的容器
root@0123ce118bd8:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

可以运行exit命令来退出容器:

root@0123ce118bd8:/# exit
exit
$
# 注意,此时已经退出了当前运行的容器,返回到了宿主主机中

4.3 后台模式启动容器

通过-d参数运行一个以进程方式运行的容器,该容器将会以后台模式运行:

$ docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63

可以看到,在上面的输出里,输出了一串长串,这个长串是容器ID,每个容器的容器ID都是唯一的,可以通过容器ID来查看对应的容器发生了什么。

首先需要确认有容器正在运行,可以通过docker ps命令来查看:

$ docker ps
CONTAINER ID        IMAGE            COMMAND                      CREATED             STATUS        PORTS       NAMES
5917eac21c36        ubuntu:15.10     "/bin/sh -c 'while t...'"    5 months ago        Running                       

输出详解:

  • CONTAINER ID:容器ID
  • IMAGE:容器使用的镜像文件
  • COMMAND:启动容器时运行的命令
  • CREATED:容器的创建时间
  • STATUS:容器的状态,状态有7种:
    • created:已创建
    • restarting:重启中
    • running或up:运行中
    • removing:迁移中
    • paused:暂停
    • exited:停止
    • dead:死亡
  • PORTS:容器的端口信息和使用的连接类型
  • NAMES:自动分配的容器名称

在宿主主机中使用docker logs <容器ID>(或者使用docker logs <容器NAME>)命令,可以查看容器内的标准输出:

$ docker logs 2b1b7a428627
hello world
hello world
hello world
...

4.4 停止容器

可以使用docker stop <容器ID>(或者使用docker stop <容器NAME>)命令来停止容器:

$ docker stop 2b1b7a428627
2b1b7a428627

5. Docker容器使用

5.1 Docker客户端

可以直接输入docker来查看Docker客户端的所有命令选项
可以通过docker command --help 深入地了解某条Docker的命令的使用方法

5.2 容器使用

5.2.1 获取镜像

如果本地没有镜像,就需要使用docker pull命令来获取镜像:

docker pull ubuntu

5.2.2 启动镜像

可以通过docker run命令运行一个镜像:

# 以交互式终端的形式启动容器ubuntu并执行命令/bin/bash
$ docker run -it ubuntu /bin/bash
root@750bbbcfd88:/#

若要退出容器终端,则直接输入exit:

$ docker run -it ubuntu /bin/bash
root@750bbbcfd88:/# exit
exit

5.2.3 启动已经停止的容器

先使用docker ps -a命令查看所有的容器,再使用docker start命令启动一个已经停止的容器:

$ docker ps -a
CONTAINER ID        IMAGE            COMMAND                      CREATED             STATUS                    PORTS           NAMES
5917eac21c36        ubuntu:15.10     "/bin/sh -c 'while t...'"    5 months ago        Exited(0) 2 minutes ago

$ docker start 5917eac21c36

5.2.4 后台运行

大部分的场景下,我们希望docker的服务是在后台运行的,此时可以使用-d参数指定容器以后台模式运行:

$ docker run -it -d --name ubuntu-test ubuntu /bin/bash
# --name ubuntu-test 命名该容器为ubuntu-test

注意:加了-d参数默认不会进入容器,想要进入容器要使用指令docker exec

5.2.5 停止一个容器

停止容器的命令为docker stop <容器ID>,已经停止的容器可以通过docker restart <容器ID>重启:

$ docker stop 5917eac21c36 
5917eac21c36

$ docker restart 5917eac21c36
5917eac21c36

5.2.6 进入容器

使用-d参数时,容器启动后会进入后台运行,此时想要进入容器,可以使用一下命令进入:

  • docker attach <容器ID>
  • docker exec <容器ID>

两者的不同之处在于使用docker attach命令进入容器后,若此时从这个容器终端退出,会导致容器的停止,而使用docker exec命令则不会,因此一般推荐使用docker exec命令进入容器。

5.2.7 导出和导入容器

导出容器

如果要导出本地某个容器,可以使用docker export命令:

$ docker export 5917eac21c36 > ubuntu.tar
# 导出容器 5917eac21c36 快照到本地文件ubuntu.tar
导入容器

可以使用docker import命令从容器快照中再导入为镜像;
此外也可以通过指定URL或者某个目录来导入

$ cat docker/ubuntu.tar | docker import - test/ubuntu:v1
# 导出容器 5917eac21c36 快照到本地文件ubuntu.tar

$ docker import http://example.com/exampleimage.tgz example/imagerepo

5.2.8 删除容器

删除容器可以使用docker rm命令,删除容器时容器必须是停止状态,否则会报错!

$ docker rm -f 5917eac21c36
5917eac21c36

可以使用命令docker container prune清理掉所有处于终止状态的容器。

5.2.9 端口映射

可以使用-p hostPort:containerPort参数来将容器的端口映射到对应的宿主主机端口:
-P参数将会把容器的端口随机映射到宿主主机的一个端口

$ docker run -d -p 8080:80 nginx:latest

6. Docker镜像使用

6.1 列出镜像列表

可以使用docker images命令来列出本地主机上的镜像:

$ docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              15.10               90d5884b1ee0        5 days ago          188 MB

输出详解:

  • REPOSITORY:表示镜像的仓库源
  • TAG:镜像的标签
  • IMAGE ID:镜像ID
  • CREATED:镜像创建时间
  • SIZE:镜像大小

同一镜像源可以有多个TAG,代表这个仓库源的不同版本,比如Ubuntu仓库源里,有15.10、14.04、16.04等多个不同的版本,Docker使用REPOSITORY:TAG来定义不同的镜像,若要使用16.04版本的ubuntu镜像,则命令如下:

$ docker run -it ubuntu:16:04 /bin/bash

6.2 获取一个新的镜像

当想要获取下载一个新的镜像,可以使用docker pull命令来下载:

$ docker pull ubuntu:13.10
13.10: Pulling from library/ubuntu
6599cadaf950: Pull complete 
23eda618d451: Pull complete 
f0be3084efe9: Pull complete 
52de432f084b: Pull complete 
a3ed95caeb02: Pull complete 
Digest: sha256:15b79a6654811c8d992ebacdfbd5152fcf3d165e374e264076aa435214a947a3
Status: Downloaded newer image for ubuntu:13.10

6.3 查找镜像

可以从DockerHub网站来搜索镜像
也可以使用docker search命令来搜索镜像:

$ docker search mysql

输出详解:

  • NAME: 镜像仓库源的名称
  • DESCRIPTION: 镜像的描述
  • OFFICIAL: 是否 docker 官方发布
  • stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
  • AUTOMATED: 自动构建。

6.4 删除镜像

可以使用docker rmi命令来删除一个镜像:

$ docker rmi hello-world

6.5 创建镜像

当从 docker 镜像仓库中下载的镜像不能满足需求时,可以通过以下两种方式对镜像进行更改:

  • 从已经创建的容器中更新镜像,并且提交这个镜像
  • 使用 Dockerfile 指令来创建一个新的镜像

6.6 为镜像设置标签

可以使用docker tag命令为镜像添加一个新的标签:

$ docker tag 860c279d2fec centos:dev
posted @   N1rv2na  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示