Docker 半小时快速学习

1. Docker概念

简单地讲,可以将Docker容器理解为一种轻量级的沙盒(sandbox)。每个容器内运行着一个应用,不容的容器相互隔离,容器之间也可以通过网络相互通信。容器的创建和停止十分快速,几乎跟创建和终止原生应用一致;另外,容器自身对系统的额外需求也十分有限,远远低于传统虚拟机。很多时候,甚至直接把容器当作应用本身也没有任何问题。

容器优势:

  • 更快速的交付和部署

  • 更高效的资源利用

  • 更轻松的迁移和扩展

  • 更简单的更新管理

2. Ubuntu环境下Docker安装

从稳定性考虑推荐安装Ubuntu 16.04 LTS或Ubuntu 18.04 LTS系统。LTS(Long-Term-Support)意味着更稳定的功能和更长期的升级支持。

参考第2章P13-P14。

安装完后,可以通过


docker version

命令确定是否安装成功。

在这里插入图片描述

3. Docker 三大概念

镜像、容器和仓库。

镜像: 可以理解为一个只读的模板;镜像是创建Docker容器的基础。

容器: 类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用。容器是从镜像创建的应用运行实例。它可以启动、开始、停止、删除,而这些容器都是彼此相互隔离、互不可见的;

仓库: 仓库类似于代码仓库,是Docker集中存放镜像文件的场所。

4. 使用Docker镜像

4.1 获取镜像


docker [image] pull NAME[:TAG]

例如,获取一个Ubuntu 18.04系统的基础镜像可以使用如下命令:


docker pull ubuntu:18.04

4.2 查看镜像


docker images 或 docker image ls

在这里插入图片描述

4.3 删除和清理镜像


docker rmi或docker image rm

例如,要删除掉myubuntu:latest镜像,可以使用如下命令:


docker rmi myubuntu:latest

4.4 创建镜像

创建镜像的方法主要有三种:基于已有镜像的容器、基于本地模板导入、基于Dockerfile创建。

  1. 基于已有容器创建

docker [container] commit

例子,通过一个镜像创建一个容器,并在其中进行修改操作。例如,创建一个test文件,之后推出,代码如下:


$ docker run -it ubuntu:18.04 /bin/bash

root@a925cb40b3f0:/# touch test

root@a925cb40b3f0:/# exit

记住容器的ID为a925cb40b3f0。

此时该容器与原ubuntu:18.04镜像相比,已经发生了改变,可以使用docker [container] commit 命令来提交为一个新的镜像。提交时可以使用ID或名称来制定容器:


$ docker [container] commit -m "Add a new file" -a "Docker newbee" a925cb40b3f0 test:0.1

9e9c814023bcffc3e67e892a235afe61b02f66a947d2747f724bd317dda02f27

顺利的话,会返回新创建镜像的ID信息,如上所示:9e9c814023bcffc3e67e892a235afe61b02f66a947d2747f724bd317dda02f27。

此时就可以用docker images命令查看本地镜像列表,会发现新创建的镜像已经存在了。

  1. 基于本地模板导入

  2. 基于Dockerfile创建

基于Dockerfile是最常见的方式。Dockerfile是一个文本文件,利用给定的指令描述基于某个父镜像创建新镜像的过程。


docker [image] build 

4.5 存出和载入镜像

将镜像导出为本地文件(tar文件):


docker [image] save

例如,利用下面的命令就可以将镜像ubuntu:18.04导出为ubuntu_18.04.tar文件,用户就可以通过复制这个tar文件将该镜像分享给他人。


$ docker save -o ubuntu_18.04.tar ubuntu:18.04

可以通过下面的命令将别人生成的tar镜像文件载入:


docker [image] load

例如,


$ docker load -i ubuntu_18.04.tar

或者


$ docker load < ubuntu_18.04.tar

5. 容器

容器是Docker的另一个核心概念。简单来说,容器是镜像的一个运行实例。所不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层,同时,容器中的应用进程处于运行状态。

Docker容器是独立运行的一个(或一组)应用,以及他们必须的运行环境。

5.1 创建容器


docker [container] create

例如,


$ docker create -it ubuntu:latest

然后可以还用docker ps命令查看已经创建的所有容器。

注意,使用docker [container] create创建的容器默认处于停止状态,可以还用docker [container] start命令来启动它。

5.2 启动容器


$ docker [container] start

5.3 新建并启动容器


docker [container] run

下面的命令启动一个bash终端,允许用户进行交互:

在这里插入图片描述

5.4 查看容器


docker ps

docker ps只能查看在运行中的容器,不显示停止的或已经退出的容器。要查看所有容器,可以通过docker ps -a命令。

在这里插入图片描述

5.5 守护状态运行


docker [container] run -d

5.6 停止容器

暂停容器:


docker [container] pause CONTAINER [CONTAINER...]

处于paused的容器,可以使用docker [container] unpause CONTAINER [CONTAINER…]命令来恢复到运行状态。

终止容器:


docker [container] stop

处于终止的容器,可以通过docker [container] start命令来重新启动。

可以使用下面的命令将一个运行状态的容器先终止,然后再重新启动:


docker [container] restart

5.7 进入容器

attach命令:


docker [container] attach [--detach-keys [ = [ ] ] [--no-stdin] [--sig-proxy [= true] ] CONTAINER

使用attach命令有时候并不方便。当多个窗口同时attach 到同一个容器的时候,所有窗口都会同步显示;当某个窗口因命令阻塞时,其他窗口也无法执行操作了。

exec命令:


docker [container] exec [-d | --detach] [--detach-keys [= [] ] [-i | --interactive] [--privileged] [-t | --tty] [-u | --user [=USER] ]  CONTAINER COMMAND [ARG...]

例如,进入到刚创建的容器中,并启动一个bash:


$ docker exec -it 243c32535da7 /bin/bash

root@243c32535da7: /#

推荐使用exec进入容器。

5.8 显示日志(控制台输出)

可以用docker logs命令显示日志(控制台输出):

在这里插入图片描述
-f参数表示持续保持输出。

5.9 删除容器


docker [container] rm

默认情况下,docker rm命令只能删除已经处于终止或退出状态的容器,并不能删除还处于运行状态的容器。

如果要强制删除,则添加-f参数。

5.10 查看容器内进程


docker [container] top

在这里插入图片描述

5.11 查看端口


docker [container] port

例子,查看uwb容器的端口:

在这里插入图片描述

6. 端口映射与容器互联

允许映射容器内应用的服务端口到本地宿主主机。


docker run -d --name shiotcuwb -p 10000:10000/udp -p 6555:6555 uwb

7. 使用Dockerfile创建镜像


FROM ubuntu:18.04

LABEL maintainer  liudehua<[email protected]>

COPY ./publish /uwb/uwbengin/

RUN chmod +x /uwb/uwbengin/uwbservice

RUN apt-get update && apt-get install -y libicu-dev

WORKDIR /uwb/uwbengin

CMD ./uwbservice

EXPOSE 10000

发布了108 篇原创文章 · 获赞 126 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/qq_16587307/article/details/102730757