Docker是什么?
Docker是一个开源的应用容器引擎,基于GO语言编写并遵从Apache 2.0开源协议。
Docker可以让应用开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何的Linux服务器上运行。容器技术基于进程的虚拟化,相比于虚拟机的硬件设备虚拟化来说,对系统的资源消耗更低,容器启动速率可以达到秒级。同时容器基于Cgroup技术隔离,容器之间互不干扰,安全性得到保障。
Docker的应用场景
- Web应用的自动化打包和发布
- 自动化测试和持续集成、发布
Docker架构
docker包含镜像、容器、镜像仓库三个基本概念,容器的创建、运行、更新、销毁也都围绕这三个要素展开。
- 镜像(Image):Docker镜像相当于一个root文件系统,包含了应用运行所需要的软件包以及依赖环境,比如官方镜像nginx就包含了完整的nginx服务运行需要的应用软件、系统环境、配置文件。
- 容器(Container):容器是镜像运行时的实体,容器运行时所承载的应用也正常运行了并可以对外提供服务。容器可以被创建、启动、停止、删除、暂停等。
- 镜像仓库(Repository):镜像的集合,用于保存所有的镜像。应用开发者可以按需从镜像仓库拉取镜像,也可以将自定义镜像上传到镜像仓库用于后续使用。
Docker安装
官方安装脚本自动安装
安装命令:
curl -fsSL get.docker.com -o get-docker.sh
sh get-docker.sh
systemctl restart docker #启动docker
手动安装
参考链接:https://www.runoob.com/docker/centos-docker-install.html
Docker管理命令
命令帮助:
[root@ecs-43447130 docker]# docker
也可以通过命令docker command --help 更深入的了解指定的docker命令使用方法
[root@ecs-43447130 docker]# docker run --help
命令大全:
https://www.runoob.com/docker/docker-command-manual.html
Docker 容器使用
获取镜像
启动容器前,本地必须有镜像,如果没有则需要通过docker pull 命令去docker hup仓库下载镜像。
$ docker pull nginx
容器生命周期管理
使用docker run命令启动容器,run命令可以指定更多的参数,包括端口映射、容器名称、dns、网络类型等等参数,具体可以参见帮助文档。
$ docker run -d -p 9000:80 nginx:latest //启动容器
$ docker ps //查看当前运行容器 -a 参数展示全部容器
$ docker stop "container id" //停止容器
$ docker restart "container id" //重启容器
$ docker pause "container id" //暂停容器
$ docker unpause "container id" //取消暂停容器
$ docker rm -f "container id" //删除容器
进入容器
容器运行指定 -d 参数后,容器启动后会进入后台运行,此时像进入容器有2个方式进入:
- docker attach 该命令退出后 会导致容器的停止 不推荐
- docker exec 推荐使用这个命令 该命令退出容器后不会导致容器的停止
$ docker exec -it <container id> /bin/sh
容器导出\导入
导出容器
通过使用docker export 命令导出容器快照到本地文件,以.tar格式保存。
$ docker export bb60ed842d7b > nginx.tar
导出容器前请使用docker ps --no-trunc 命令查看当前容器的 command,后续导入镜像并启动容器时需要指定command。
$ docker ps --no-trunc
导入容器
通过使用docker import 命令从容器快照文件中再导入新平台注册为容器镜像,实现跨平台迁移。
$ cat nginx.tar | docker import - test/nginx:v1
此外,也可以通过指定的URL或者目录来导入。
$ docker import http://example.com/exampleimage.tgz example/imagerepo
Docker 镜像使用
当运行容器时,指定的容器镜像在本地镜像仓库中不存在,docker就会自动从Docker Hub公共镜像仓库中下载。
对我们来说,主要关注:
- 管理和使用本地镜像;
- 创建本地镜像
镜像管理
列出镜像列表
通过docker images 命令列出本地镜像仓库中的全部镜像信息
查找镜像
我们可以通过docker search 命令从Docker Hub上搜索镜像
拉取镜像
可以通过docker pull命令从Docker Hub上下载镜像到本地仓库
删除镜像
我们可以通过docker rmi 命令删除本地镜像仓库的任意镜像;
创建镜像
如果docker hub仓库下载的镜像不能满足我们的应用需要,我们可以通过以下两种方式创建自定义镜像;
- 从已经创建的容器中更新镜像内容,并提交这个镜像
- 使用Dockerfile 指令来创建一个新的镜像
更新镜像
我们可以进入一个已经运行的容器,在容器中创建新的文件 touch test.txt。
退出容器后,使用docker commit 来提交容器副本成为新镜像;
构建镜像
我们使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。例如下图就是一个Dockerfile文件。
每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。因此RUN指令不建议太多条,可以合并添加避免镜像有过多的层。
第一条FROM,指定使用哪个镜像源
RUN 指令告诉docker 在镜像内执行命令,安装、添加什么。
然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。
查看镜像
设置镜像标签
我们可以使用docker tag 为镜像添加一个新标签。
Docker 仓库管理
公共仓库 Docker Hub
仓库登陆和退出
$ docker login //登陆
$ docker logout //登出
拉取镜像
$ docker search ubuntu //查找镜像
$ docker pull ubuntu //拉取镜像到本地
推送镜像
其中username替换为自己的Docker Hub账号用户名
$ docker tag ubuntu:18.04 username/ubuntu:18.04 //镜像打标签
$ docker push username/ubuntu:18.04 //镜像推送到仓库
本地私有镜像仓库
本地私有镜像仓库在部署docker服务的主机上,用户可以通过docker images查询本地的容器镜像,也可以制作、修改镜像到本地仓库。
$ docker images //查询本地全部镜像