docker
什么是docker?
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
docker 安装
安装yum-utils
yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
# 安装命令 -y 表示安装过程不再询问,默认yes
yum -y install yum-utils
配置仓库
选择数据源
使用官方源安装
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
使用阿里云的数据源安装
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
使用清华大学源
yum-config-manager \
--add-repo \
https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
安装docker
Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。
默认安装最新版。
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安装特定版本
yum list docker-ce --showduplicates | sort -r
列出所有可用版本
# 执行命令,填上版本号即可
yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
查看docker版本
docker version
启动docker
systemctl start docker
# 查看是否启动成功
systemctl status docker
下载第一个镜像
# 执行命令
docker pull hello-world
默认下载最新版本
查看镜像是否现在成功
启动第一个容器
docker run -it hello-world
到现在为止,我们docker已经配置好数据源,docker下载成功,启动成功,第一个镜像下载成功,第一个容器启动成功!
下面看一张图片,基本描述了整个docker学习过程中,需要用到的所有命令。
镜像-Image
Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
但是请记住,docker镜像为了做到最小量级,去掉了很多工具类和插件,比如clear、比如ll命令。
搜索镜像
# 此处可以不加版本号
docker search 镜像名:版本号
# 比如,搜索mysql镜像
docker search mysql:5.7
下载镜像
# 可以不加版本号,如果不加版本号,默认下载最新版本
docker pull 镜像名:版本号
# 下载mysql镜像
docker pull mysql
查看镜像
# 查看下载好的镜像
docker images
容器-Container
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等
镜像相当于一个root文件系统,当我们启动一个镜像后,该文件系统运行成功。
由于该文件系统与宿主机是隔离的,所以我们称之为容器。当然与其他的容器也是隔离的。
隔离变现为:网络、端口等信息。
启动容器
# 先下载一个centos镜像
docker pull centos
# docker run 镜像或者镜像ID
docker run -it --name centos01 centos
# -it 代表以交互方式启动一个前台进程,退出即关闭容器
# 我们可以新开窗口查看 容器是否启动成功
docker ps
查看容器进程信息
# exit可以退出容器 退出后再次查看启动容器的进程
docker ps
# 我们可以查看历史启动容器 -a展示所有的容器信息 -q只展示容器ID 联合使用 展示所有容器ID
docker ps -a
后台启动
- 直接启动 -d
# 我们以后台方式启动一个容器
docker run -d --name centos02 centos
# 但是这样的后台启动有一个小问题,即再无后台操作的情况下,或者命令执行时间过短的情况下,容器会自动停止,导致我们除了根据日志或者容器历史记录,无法确定查看容器启动的记录。
- 启动时带有执行指令
# 换一种后台启动模式 -d
# docker run --name=自定义容器名 -d 容器镜像(环境)容器程序
docker run --name centos-01 -d centos /bin/sh -c "while true;do echo hello world, sleep1;done"
- 启动时进入指定目录
docker run -itd --name centos-04 centos /bin/bash
进入启动容器内部
- exec
# docker exec -it 容器ID或者容器名称 目录
docker exec -it 9d6c0e0a90ff /bin/bash
- attach
docker attach 容器ID或者容器名称
停止容器
# docker stop 容器ID或者容器名称
docker stop centos-05
# docker kill 容器ID或者容器名称
docker kill 9d6c0e0a90ff
删除容器
# 查询历史容器
docker ps -a
# 删除指定容器
docker rm -f 容器ID或者容器名称
# 删除全部容器
docker rm -f $(docker ps -q)
数据卷
数据卷是独立于容器的数据!
在Docker中,要想实现数据的持久化(所谓Docker的数据持久化即***数据不随着Container的结束而结束***),需要将数据从宿主机挂载到容器中。
目前Docker提供了三种不同的方式将数据从宿主机挂载到容器中:
volumes
Docker管理宿主机文件系统的一部分,默认位于 /var/lib/docker/volumes 目录中;(最常用的方式)
匿名挂载
# 启动centos容器 同时创建匿名挂载
# -v 后面是容器内路径
docker run -itd --name centos01 -v /opt centos
# 查看数据卷信息
docker inspect 容器ID
查看"Mounts"节点下内容:
具名挂载
# -v 后面就是数据卷名字
docker run -itd --name centos02 -v centos02-volume:/opt centos /bin/bash
# docker volume inspect 数据卷名称 查看数据卷详情
docker volume inspect centos02-volume
指定路径挂载
# 指定路径挂载
docker run -itd --name centos03 -v /opt/test:/opt:ro centos
# 通过-v 容器内路径.ro/rw 指定容器内文件是否只读
ro readoly 只读
rw readwirte 读写
# 当挂载文件后出现ro时,则容器无法对该文件做出写操作,只能通过宿主机操作。
bind mounts
意为着可以存储在宿主机系统的任意位置;(比较常用的方式)
但是,bind mount在不同的宿主机系统时不可移植的,比如Windows和Linux的目录结构是不一样的,bind mount所指向的host目录也不能一样。这也是为什么bind mount不能出现在Dockerfile中的原因,因为这样Dockerfile就不可移植了。
tmpfs
挂载存储在宿主机系统的内存中,而不会写入宿主机的文件系统;(一般都不会用的方式)
仓库-Repository
仓库可看成一个代码控制中心,用来保存镜像。我们可以提交一个镜像,也可以从开源仓库下载别人做好的镜像。
后文待续