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
标签:容器,教程,命令,ubuntu,镜像,docker,Docker
From: https://www.cnblogs.com/N1rv2na/p/18277721