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
|