没有输出的输入是不完整的

0%

Docker初探-认识并使用docker

docker是目前最流行的虚拟化技术。
本篇文章主要介绍docker的基本概念以及初步尝试使用docker技术。

docker是什么

Docker 属于 Linux容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。

Docker将应用程序与该程序的依赖,打包在一个文件里面。只要运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。

docker好在哪

  1. 更高效的利用系统资源
  2. 更快速的启动时间
  3. 一致的运行环境
  4. 持续交付和部署
  5. 容易迁移、维护和扩展

docker专有名词

  1. 镜像,image, 包括各种环境的定义和说明。
  2. 容器,container, 是一个镜像的运行实体,不同容器之间是相互隔离的。
  3. 仓库,镜像的仓库,用于用户发布自己的镜像或者查找自己需要的镜像,目前最大的公开仓库为Docker hub,一个项目star越多,说明项目越好越稳定。

常用命令

启动docker

如果是mac或者windows用户,可以直接使用Docker Desktop来可视化处理
如果是linux用户,需要通过命令行来启动

1
sudo service docker start/stop/restart

使用docker

  1. help帮助命令
1
docker image --help

通过这条命令可以查看与docker的镜像相关的命令
将image替换为container,则可以查看到关于container的相关帮助。
同时,可以进一步查看相关命令的细节,比如下面的命令就可以查看image下prune命令的细节。

1
docker image prune --help
  1. 搜索并拉取镜像
1
2
3
4
5
6
7
8
9
// 搜索与ubuntu相关的image
docker search ubuntu

// 拉取镜像到本地
docker pull ubuntu

// 如果没有特别声明tag,会默认使用latest标签。
// 当然可以去docker hub去查找image并查看更加细节的东西,比如版本信息,然后在拉取的时候可以指定版本。
docker pull ubuntu:18.04
  1. 列出当前本地的所有镜像
1
2
3
docker images
或者
docker image ls

如果想同时查看中间层镜像

1
2
3
docker images -a
或者
docker image ls -a
  1. 删除本地镜像
1
2
3
4
5
6
7
8
9
10
11
12
// 删除固定的某个镜像
docker rmi imageid
docker image rm imageid

//删除所有玄虚镜像
docker image prune

// 删除所有玄虚镜像和未使用的景象
docker image prune -a

// 删除所有仓库名为redis的镜像
docker image rm $(docker image ls -q redis)
  1. 启动一个容器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 从image启动一个容器
docker run -it --name ubuntu ubuntu:18.04 /bin/bash
-i : Keep STDIN open even if not attached 即使没有连接,也要保持标准输入保持打开状态
-t : Allocate a pseudo-TTY 分配一个伪tty
-name ubuntu : 为当前容器分配名字为ubuntu
ubuntu:18.04 :要运行的镜像
/bin/bash :要执行的命令。

还有一个参数非常常见
-d : Run container in background and print container ID 在后台运行容器,且打印容器id


// 把之前停止的容器重新启动
docker start containerid
docker attach containerid

使用docker run命令来启动容器,docker在后台运行的标准操作包括

1. 检查本地是否存在指定的镜像,不存在则从公有仓库下载
2. 使用镜像创建并启动容器
3.分配一个文件系统,并在只读的镜像层外面挂载一层可读可写层
4.从宿主主机配置的网桥接口中桥接一个虚拟接口道容器中去
5.从地址池分配一个ip地址给容器
6.执行用户指定的应用程序
7.执行完毕之后容器被终止

需要注意的是,对于容器要执行的命令而言,如果执行结束,那么容器就会关闭。

  1. 查看当前正在运行的容器
1
docker ps

如果还想查看已经退出的容器

1
docker ps -a
  1. 连接一个执行之中的容器
1
docker container exec -it containerid
  1. 退出正在运行的容器
1
2
3
ctrl + D
或者
exit
  1. 查看镜像所占空间
1
docker system df
  1. 删除某些名称中含有dingms的container
1
docker container rm $(docker ps -a |grep dingms | awk '{print $1}')
  1. 守护态进程
    很多时候,需要让docker在后台运行而不是直接把结果输出到当前宿主下面,这个时候可以用守护态运行。
1
2
3
4
5
6
7
8
// 没有使用守护态,始终在本地终端输出
docker run ubuntu:18.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"

//使用守护态,不在本地终端输出,但是在最后结果输出
docker run -d ubuntu:18.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
// 查看当前contain
docker container ls
docker container logs containerid
  1. 终止某个容器
1
docker container stop containerid

对于正在运行中的容器,重新启动

1
docker container restart containerid
  1. 进入容器
1
2
3
4
5
6
docker attach containerid

docker exec -it containerid bash

用attach进入终端之后,如果exit会直接让容器终止。
但是exec通过exit退出之后,容器不会终止。
  1. 镜像打包和加载
1
2
3
4
// 打包镜像
docker save -o ~/Desktop/kuakua.tar kuakua:latest
// 加载tar包到对应的镜像
docker load -i ~/Desktop/kuakua.tar
  1. 导出和导入容器
1
2
3
4
5
6
// 导出容器快照文件到本地文件
docker export containerid > name.tar
// 从容器快照文件再导入为镜像
cat name.tar | docker import - test/name:v1.0
// 查看所属镜像
docker images

从网上找到一个非常棒的图
image

参考文章

  1. Docker 从入门到实践
  2. Docker-cli官方文档
  3. 30 分钟快速入门 Docker 教程