Docker:安装和操作
Docker
基本概念
Docker架构
- Docker使用客户端-服务器架构
- Docker客户端与Docker守护进程进行对话,该守护进程完成了构建,运行和分发Docker容器的繁重工作
相关描述
Docker 镜像(Images)
- Docker 镜像是用于创建 Docker 容器的模板,比如 mysql、Nginx等
- 相当于是一个 root 文件系统
Docker 容器(Container)
- 容器是独立运行的一个或一组应用,是镜像运行时的实体。
- 镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样。容器可以被创建、启动、停止、删除、暂停等
Docker 客户端(Client)
- Docker 客户端通过命令行或者其他工具使用 Docker SDK 与 Docker 的守护进程通信。
Docker 主机(Host)
- 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
Docker Registry
- Docker 仓库用来保存镜像,仓库可看成一个代码控制中心,用来保存镜像。
- Docker Hub 提供了庞大的镜像集合供使用。
- 一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像
- 通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。
Docker Machine
- Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。
应用场景
-
快速,一致地交付您的应用程序:容器非常适合持续集成和持续交付(CI / CD)工作流程
-
响应式部署和扩展:Docker 是基于容器的平台,允许高度可移植的工作负载
-
在同一硬件上运行更多工作负载:Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案
Docker安装和使用
自动安装
使用官方安装脚本自动安装
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
使用国内 daocloud 一键安装命令
curl -sSL https://get.daocloud.io/docker | sh
手动安装
卸载旧版本
Docker 的旧版本被称为 docker,docker.io 或 docker-engine
$ sudo apt-get remove docker docker-engine docker.io containerd runc
当前版本
-
当前称为 Docker Engine-Community 软件包 docker-ce
-
两种安装方式
-
使用 Docker 仓库进行安装
-
在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库
-
设置仓库
-
更新 apt 包索引
$ sudo apt-get update
-
安装 apt 依赖包,用于通过HTTPS来获取仓库
$ sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common
-
添加 Docker 的官方 GPG 密钥
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
-
验证您现在是否拥有带有指纹的密钥
-
通过搜索指纹的后8个字符
$ sudo apt-key fingerprint 0EBFCD88 pub rsa4096 2017-02-22 [SCEA] 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 uid [ unknown] Docker Release (CE deb) <docker@docker.com> sub rsa4096 2017-02-22 [S]
-
-
使用以下指令设置稳定版仓库
$ sudo add-apt-repository \ "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/ \ $(lsb_release -cs) \ stable"
-
-
安装 Docker Engine-Community
-
更新 apt 包索引
$ sudo apt-get update
-
安装最新版本的 Docker Engine-Community 和 containerd
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
-
安装特定版本的 Docker Engine-Community
-
在仓库中列出可用版本
$ apt-cache madison docker-ce
-
然后选择一种安装
- 使用第二列中的版本字符串安装特定版本,例如 5:18.09.13-0ubuntu-xenial
$ sudo apt-get install docker-ce=<5:18.09.13-0ubuntu-xenial> docker-ce-cli=<5:18.09.13-0ubuntu-xenial> containerd.io
- 使用第二列中的版本字符串安装特定版本,例如 5:18.09.13-0ubuntu-xenial
-
-
测试 Docker 是否安装成功
$ sudo docker run hello-world
-
-
-
使用 Shell 脚本进行安装
- Docker 在 get.docker.com 和 test.docker.com 上提供了方便脚本
-
-
设置用户权限
- 避免每次命令都输入sudo
- sudo usermod -a -G docker $USER
- 执行后须注销重新登录
基本操作
启动与停止
-
启动
sudo service docker start
-
停止
sudo service docker stop
-
重启
sudo service docker restart
镜像操作
-
列出镜像
docker images
-
搜索镜像
docker search django
-
拉取镜像
- 要想获取某个镜像,我们可以使用pull命令,从仓库中拉取镜像到本地
docker pull hackeryx/ubuntu:16.04
- 要想获取某个镜像,我们可以使用pull命令,从仓库中拉取镜像到本地
-
删除镜像
- docker image rm 镜像名或镜像id
-
镜像备份与迁移
-
通过save命令将镜像打包成文件,拷贝给别人使用
- docker save -o 保存的文件名 镜像名
- docker save -o ./ubuntu.tar ubuntu
-
在拿到镜像文件后,可以通过load方法,将镜像加载到本地
- docker load -i ./ubuntu.tar
-
容器操作
-
创建容器
-
docker run [option] 镜像名 [向启动容器中传入的命令]
-i 表示以“交互模式”运行容器
-t 表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即 分配一个伪终端。
--name 为创建的容器命名
-v 表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录,即 宿主机目录:容器中目录),可以使 用多个-v 做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后 共享到容器上。
-d 在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不 会自动登录容器,如果只加-i -t 两个参数,创建后就会自动进去容器)。
-p 表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p 做多个端口映射
-e 为容器设置环境变量
--network=host 表示将主机的网络环境映射到容器中,容器的网络与主机相同 -
交互式容器
- 在容器中可以随意执行linux命令,就是一个ubuntu的环境,当执行exit命令退出时,该容器也随之停止
- docker run -it --name=ubuntu --network=host hackeryx/ubuntu:16.04 /bin/bash
-
守护式容器
- 如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器。在容器内部exit退出时,容器也不会停止
- docker run -itd --name=ubuntu2 --network=host hackeryx/ubuntu:16.04
-
-
进入已运行的容器
- docker exec -it 容器名或容器id 进入后执行的第一个命令
- docker exec -it ubuntu /bin/bash
-
查看容器
- 列出本机所有容器,包括已经终止运行的
- docker ps -a
-
停止与启动容器
-
停止一个已经在运行的容器
- docker container stop 容器名或容器id
-
启动一个已经停止的容器
- docker container start 容器名或容器id
-
kill掉一个已经在运行的容器
- docker container kill 容器名或容器id
-
-
删除容器
- docker container rm 容器名或容器id
-
将容器保存为镜像
- docker commit 容器名 镜像名