Docker学习笔记

什么是Docker


  我记得,我最早接触Docker的时候是2017年,吴树鑫老师的信息安全课上讲的,那个时候他推荐了CloudMan的教程。时间真TM快啊。
  回到正题。
  正确答案是:Docker 是世界领先的软件容器平台。

为什么用Docker


解决什么问题

  使得软件在任何环境中都能够始终如一地运行,不受外部系统环境差异的影响。

解决方案

虚拟机

  虚拟机 (VM) 是一个物理硬件层抽象,用于将一台服务器变成多台服务器。

缺点:

  • 占用资源多
  • 操作麻烦
  • 启动缓慢

容器

  容器是一个应用层抽象,用于将代码和依赖资源打包在一起。多个容器可以在同一台机器上运行,共享操作系统内核,但各自作为独立的进程在用户空间中运行。容器镜像是轻量的、可执行的独立软件包,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置。

优势:

  • 启动快
  • 占用资源少
  • 命令操作简单

Docker用途

Docker 属于容器的一种封装,提供简单易用的容器使用接口。

  • 提供一次性一致的测试,构建和部署环境;
  • 提供弹性操作服务;
  • 构建微服务架构。

怎么样用Docker


常用命令

安装Docker

1
2
3
yum install docker
或者
apt install docker

验证安装

1
2
3
docker verison
或者
docker info

服务操作

1
sudo service docker start(restart/stop/status)

或者

1
sudo systemctl start(restart/stop/status) docker

image操作

image 是引用程序及其依赖的载体,image是二进制文件,在Docker中是通用的,可继承其他image,比较常用的image都是从Docker Hub拉取。

拉取image

1
2
3
docker image pull 'imageName'
或者
docker iamge pull 'pathName'/'imageName'

列出image

1
docker image ls

删除image

1
docker image rm 'imageName'

运行image

1
docker container run 'imageName'

解释:先创建一个容器实例,然后运行image,会产生一个containID,如果本地没有改image,则自动从Docker Hub拉取。

停止运行image

1
docker container kill 'containID'

container操作

container是image运行的载体,也就是容器实例。

列出正在运行container

1
docker container ls

列出所有container

1
docker container ls -a

删除container

1
docker container rm 'containerID'

启动container

1
docker start 'containerID/containerName'

停止container

1
docker stop 'containerID/containerName'

重启container

1
docker restart 'containerID/containerName'

container与image的关系

镜像是文件, 容器是进程。 容器是基于镜像创建的, 即容器中的进程依赖于镜像中的文件, 这里的文件包括进程运行所需要的可执行文件, 依赖软件, 库文件, 配置文件等等…

案例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@izwz951e3fbtauq6d7ez9gz ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@izwz951e3fbtauq6d7ez9gz ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
[root@izwz951e3fbtauq6d7ez9gz ~]# docker run -d -p 8001:80 httpd
Unable to find image 'httpd:latest' locally
Trying to pull repository docker.io/library/httpd ... 
latest: Pulling from docker.io/library/httpd
6ae821421a7d: Pull complete 
0ceda4df88c8: Pull complete 
24f08eb4db68: Pull complete 
ddf4fc318081: Pull complete 
fc5812428ac0: Pull complete 
Digest: sha256:5e7992fcdaa214d5e88c4dfde274befe60d5d5b232717862856012bf5ce31086
Status: Downloaded newer image for docker.io/httpd:latest
e760d48833f63f7f60688944798ce558e976e366cc3b7550a57c1dc680335a15
[root@izwz951e3fbtauq6d7ez9gz ~]# docker ps
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                  NAMES
e760d48833f6        httpd               "httpd-foreground"   21 seconds ago      Up 20 seconds       0.0.0.0:8001->80/tcp   kickass_hypatia
[root@izwz951e3fbtauq6d7ez9gz ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/httpd     latest              d3a13ec4a0f1        2 weeks ago         132 MB
[root@izwz951e3fbtauq6d7ez9gz ~]# 

操作结果

操作结果

命令解释

1
docker run -d -p 8001:80 httpd
1
docker run --name jenkins -p 8008:8080 docker.io/jenkins/jenkins
  • docker run: 运行一个Docker容器
  • -d: 表示容器在后台运行
  • -p 8001:80: 表示将宿主机的8001端口映射到容器的80端口
  • --name: 设置容器名字
  • httpd: 表示容器名称或者镜像名称,首先查找本地容器,否则查找本地镜像,否则查找DockerHub云端仓库开放的镜像,没有容器则自动创建容器。
  • CONTAINER ID: 容器ID,对容器的操作可以根据ID进行。(start、restart、stop、rm)
  • IMAGE ID: 镜像ID,和容器ID是一样的属性
  • PORTS: 容器端口映射关系
  • NAMES: 容器名称,不指定则随机分配。
  • REPOSITORY: 镜像来源,可以是本地,也可以是云端仓库

Dockerfile

Dockerfile是镜像的描述文件,是YAML标准格式的配置文件,定义了如何构建容器。关于Dockerfile的内容再另外写博文。

Docker容器命令

1
docker --help

有关命令的详细信息,请运行“ Docker 命令 –help ”。

选项参数

选项 类型 说明
–config string 客户端配置文件的位置 (default”/root/.docker”)
-D, –debug   启用调试模式
–help   打印使用方法
-H, –host list 连接到的守护程序套接字
-l, –log-level string 设置日志记录级别(“debug”/”info”/”warn”/”error”/”fatal”)(default “info”)
–tls   使用TLS ; implied by –tlsverify
–tlscacert string 仅由本ca签署的信任证书(default”/root/.docker/ca.pem”)
–tlscert string TLS证书文件路径(default”/root/.docker/cert.pem”)
–tlskey string TLS密钥文件的路径(default “/root/.docker/key.pem”)
–tlsverify   使用TLS并验证远程
-v, –version   打印版本信息并退出

管理命令

命令 说明
config 管理Docker 配置
container 管理容器
image 管理图像
network 管理网络
node 管理群集节点
plugin 管理插件
secret 管理Docker秘钥
service 管理服务
stack 管理 Docker 堆栈
swarm 管理集群
system 管理Docker
volume 管理Docker卷

控制命令

命令 说明
attach 将本地标准输入、输出和错误流附加到运行的容器
build 从Dockerfile构建镜像
commit 将已经修改的容器镜像保存为新镜像
cp 在容器和本地文件系统之间复制文件/文件夹
create 创建新容器
diff 检查容器文件系统上文件或目录的更改
events 从服务器获取实时事件
exec 在正在运行的容器中运行命令
export 将容器的文件系统导出为tar压缩包
history 显示历史镜像
images 镜像列表
import 从容器中导入并创建新的系统镜像
info 显示系统范围内的信息
inspect 返回Docker对象的底层信息
kill 杀死一个或多个正在运行的容器
load 从一个tar压缩文件或标准输入加载图像
login 登录到Docker注册表
logout 退出Docker
logs 获取容器的日志
pause 在一个或多个容器中暂停所有进程
port 列出容器的端口映射或特定映射
ps 容器列表
pull 从注册表中提取图像或存储库
push 将图像或存储库推送到注册表
rename 重命名容器
restart 重新启动一个或多个容器
rm 删除一个或多个容器container
rmi 删除一个或多个图像images
run 在新容器中运行命令
save 将一个或多个图像保存到TAR归档文件中
search 从 Docker Hub搜索镜像
start 启动一个或多个已停止的容器
stats 显示容器资源使用率统计的动态流
stop 停止一个或多个正在运行的容器
tag 创建tag压缩 TARGET_IMAGE 指向SOURCE_IMAGE
top 显示容器中运行的线程
unpause 取消所有一个或多个容器的进程的暂停
update 更新一个或多个容器的配置
version 显示Docker 版本信息
wait 等到一个或多个容器停止,然后打印他们的退出代码

参考文献


Docker官方中文文档
Docker入门教程
每天5分钟玩转Docker容器技术

今日诗词

作者信息