Docker是一个开源的应用容器引擎。
Docker诞生于2013年初,基于Go语言实现,dotCloud公司出品(后改名为Docker Inc)。
Docker可以让开发者将他们的应用和依赖包打包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上。
Docker容器完全使用沙箱机制,每一个容器都是相互隔离的,互不影响。
Docker容器的性能开销极低。
Docker从17.03版本之后分为CE(Community Edition,社区版)和EE(Enterprise Edition,企业版),CE是免费的,EE是收费的。
总之,Docker是一种容器技术,能够解决软件跨环境迁移的问题。
Docker可运行在Mac、Windows、CentOS、Ubuntu等操作系统上,官网(https://www.docker.com)。
CentOS安装Docker:
# 将yum包更新到最新
yum update
# 安装相关的软件包,yum-utils提供了yum-config-manager功能,另两个与devicemapper驱动依赖有关
yum install -y yum-utils device-mapper-persistent-data lvm2
# 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装Docker,出现输入的地方都按y
yum install -y docker-ce
# 查看Docker版本,验证其是否安装成功
docker -v
镜像(Image): Docker镜像就相当于是一个root文件系统,比如ubuntu:16.04官方镜像就包含了完整的一套root文件系统。
容器(Container): 镜像和容器的关系,就如同面向对象程序设计中类和对象的关系,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除等。
仓库(Repository): 仓库可看作是一个代码控制中心,用来保存镜像。
通常情况下,从docker hub(https://hub.docker.com/)上下载Docker镜像,速度会比较慢,因此可以配置相应的镜像加速器。
USTC:中科大镜像加速器(https://docker.mirrors.ustc.edu.cn)
阿里云:百度搜索阿里云 -> 打开阿里云官方网站 -> 登录 -> 点击控制台 -> 点击产品与服务 -> 搜索镜像 -> 点击容器镜像服务 -> 点击镜像加速器
阿里云显示了加速器地址和相关的配置流程,根据说明操作即可。
启动Docker服务
sudo systemctl start docker
停止Docker服务
sudo systemctl stop docker
重启Docker服务
sudo systemctl restart docker
查看Docker服务状态
sudo systemctl status docker
开机自动启动Docker服务
sudo systemctl enable docker
查看镜像
docker images # 查看本地所有的镜像
搜索镜像
docker search <镜像名称或关键字> # 从远程仓库中搜索需要的镜像
docker search redis # 在远程仓库中搜索redis镜像
docker search ubuntu # 在远程仓库中搜索ubuntu镜像
# 搜索的时候显示的镜像列表中不显示镜像版本,如果想知道有没有特定版本的镜像,可以到官网(hub.docker.com)上查看
拉取镜像
docker pull <镜像名称> # 从远程仓库中拉取需要的镜像
docker pull redis # 从远程仓库中拉取默认版本的redis镜像,Tag为latest
docker pull ubuntu:18.04 # 从远程仓库中拉取18.04版本的ubuntu镜像,Tag为18.04
删除镜像
docker rmi <镜像名称> # 通过镜像名称来删除
docker rmi <镜像ID> # 通过镜像ID来删除
docker rmi -f <镜像名称/镜像ID> # 使用-f参数强制删除正在使用的镜像
docker rmi redis:latest # 删除latest版本的redis镜像
删除全部镜像
docker rmi `docker images -q` # 删除全部镜像
docker images -q # 显示所有镜像的ID
查看容器
docker ps # 查看正在运行的容器
docker ps -a # 查看所有容器(包括停止的)
创建容器
docker create [选项] <镜像名称> [命令] # [选项]和[命令]是可选的;该命令创建容器后,并不会立即启动容器,想启动容器需要再执行docker start命令
docker run [选项] <镜像名称> [命令] # 创建并启动容器
docker create --name my_container ubuntu:18.04 /bin/bash # 创建一个名为my_container的容器,该容器基于ubuntu:18.04镜像,并在容器内执行/bin/bash命令,这个/bin/bash命令即使不写也会执行;容器并未启动
docker start my_container # 启动创建的容器
docker run -it --name my_container ubuntu:18.04 /bin/bash # 创建并启动容器;使用-it参数会进入容器,执行exit命令后容器会被关闭;
docker run -id --name my_container ubuntu:18.04 # 使用-id参数不会进入容器,执行exit命令后容器也不会被关闭,而是在后台运行
docker exec -it my_container /bin/bash # 可与上述命令配合使用
# docker run的参数说明
-i:保持容器运行,通过与-t同时使用。使用-it参数时,容器创建后会自动进入容器中,退出容器后容器会自动关闭。
-t:为容器重新分配一个伪输入终端,通常与-i同时使用。
-d:以守护(后台)模式运行容器。创建一个在后台运行的容器,需使用docker exec进入容器,退出后容器不会关闭。
--name:为创建的容器命名。
-it创建的容器一般称为交互式容器,-id创建的容器一般称为守护式容器。
进入容器
docker exec -it <容器名称或容器ID> <命令> # 使用-it参数可以交互式终端方式进入容器,并执行<命令>
docker exec -it my_container /bin/bash # 进入名为my_container的容器,并在容器内执行Bash终端
启动容器
docker start <容器名称或容器ID>
停止容器
docker stop <容器名称或容器ID>
删除容器
docker rm <容器名称或容器ID>
删除全部容器
docker rm `docker ps -aq` # 删除所有容器
docker ps -aq # 显示所有容器的ID
# 如果有容器正在运行,可能需要先关闭,再进行删除
查看容器信息
docker inspect <容器名称或容器ID>