目录

Docker 10 问 (第一篇)

1、容器技术解决了什么问题?

解决了开发人员和运维人员的沟通

  • 容器镜像是轻量的、可执行的独立软件包 ,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置。
  • 容器化软件适用于基于 Linux 和 Windows 的应用,在任何环境中都能够始终如一地运行。
  • 容器赋予了软件独立性  ,使其免受外在环境差异(例如,开发和预演环境的差异)的影响,从而有助于减少团队间在相同基础设施上运行不同软件时的冲突。

一句话概括容器:容器就是将软件打包成标准化单元,以用于开发、交付和部署。

2、docker 底层用了哪些技术?

  • namespace:做隔离 pid, net, ipc, mnt, uts
  • control groups:做资源限制
  • union file systems:container 和 image 的分层

3、容器和虚拟机有什么区别?

  • 容器是 APP 层面的隔离,虚拟化是物理层面的隔离;
  • 容器占用的空间较少(容器镜像大小通常只有几十兆),瞬间就能完成启动。
  • 每个 VM 都包含一整套操作系统、一个或多个应用、必要的二进制文件和库资源,因此占用大量空间。而且 VM 启动也相对缓慢。

4、什么是 DevOps?

DevOps 是一种重视“软件开发人员(Development)”和“IT 运维技术人员(Operations)”之间沟通合作的文化、运动或惯例。通过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。具体来说,就是在软件交付和部署过程中提高沟通与协作的效率,旨在更快、更可靠的的发布更高质量的产品。

5、image 与 container 的区别?

image

  • 文件和 meta data 的集合
  • 分层的,每一层可以添加改变删除文件,成为一个新的 Image
  • 不同的 image 可以共享相同的 layer
  • 本身是 read-only 的

container

  • 通过 image 创建
  • 在 image layer 上建立一个 container layer(可读写)

image 负责 app 的存储和分发,container 负责运行 app

6、Docker 有哪些常用命令?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# 查看本地镜像库
docker images

# 根据 Dockerfile 创建镜像
docker build -t [dockerName] .
# 指定 Dokcerfile 文件创建镜像
docker build -t [dockerName] -f [Dockerfile path] .

# 运行docker
# tips: 加 -d 在后台运行
docker run -p 4000:80 [dockerName]

# 查看正在运行的容器
# tips: 加 -a 查看所有容器,包括已停止运行的容器
docker ps
# 或者
docker container ls

# 关闭正在运行的容器
# 平稳的关闭
docker stop <hash>
# 强制关闭
docker kill <hash>

# 启动已关闭的容器
docker start <hash>

# 删除容器
# 删除指定的容器
docekr rm <hash>
# 从此机器中删除所有容器
docker rm $(docker ps -a -q)

# 删除镜像
# 从此机器中删除指定的镜像
docker rmi <imagename>
# 从此机器中删除所有镜像
docker rmi $(docker images -q)

# 删除所有停止的容器,所有无用的镜像以及网络
docker system prune
# 一并删除无用的卷
docker system prune --volumes
# 删除所有停止的容器
docker container prune
# 参考链接:https://linuxize.com/post/how-to-remove-docker-images-containers-volumes-and-networks/

# 将镜像打 tag
docker tag <image> username/repository:tag
# 将已标记的镜像上传到镜像库
docker push username/repository:tag

# 根据 container 创建一个新镜像
docker commit <hash> <imagename>

# 查看镜像分层
docker history <imagename>

7、如何与容器交互?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# 交互式运行镜像
docker run -it <imagename> /bin/bash

# 以交互方式进入一个正在运行的容器
docker exec -it <hash> /bin/bash

# 查看镜像或容器的配置信息
docker inspect [iamgename]

# 容器与主机之间的数据拷贝
# 将主机 /www/runoob 目录拷贝到容器 96f7f14e99ab 的 /www 目录下
docker cp /www/runoob 96f7f14e99ab:/www/
# 将容器 96f7f14e99ab 的 /www 目录拷贝到主机的 /tmp 目录中
docker cp 96f7f14e99ab:/www /tmp/

# 容器挂载宿主机目录
# -v 参数中,冒号 ":" 前面的目录是宿主机目录,后面的目录是容器内目录
docker run -it -v /Users/erwang/Desktop/docker-test/soft:/test  alpine

8、如何停止所有运行的容器?

1
docker stop `docker ps -aq`

9、如何删除所有已停止的容器?

1
2
3
4
5
# 删除所有已停止的容器
docker rm $(docker ps -a -f"status=exited" -q)

# 或者
docker ststem prune

10、docker-compose 有哪些命令

1
2
3
4
5
6
7
8
9

# 启动
docker-compose up

# 停止
docker-compose stop

# 停止并删除
docker-compose down