目录
1.docker社区免费版(docker ce)安装
这里主要介绍 Docker CE 在 CentOS上的安装。
- 如果之前安装有docker,可以通过下面命令卸载docker
yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine \ docker-ce
- 安装yum工具
yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 --skip-broken
- 更新本地镜像源,设置为阿里云镜像源,下载更快
# 设置docker镜像源 yum-config-manager \ --add-repo \ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
yum makecache fast
- 执行yum安装命令
yum install -y docker-ce
2. Docker常用命令
2.1 docker服务相关命令
- systemctl start docker #启动docker服务
- systemctl stop docker #停止docker服务
- systemctl restart docker #重启docker服务
- systemctl status docker #查看docker服务状态
- systemctl enable docker #开机(虚拟机)启动docker服务,命令执行之后,每次都不用手动启动docker服务了
2.1 docker操作镜像命令
镜像,暂时可以简单理解为软件的安装包
- docker images #查看本地所有的镜像
- docker search + 镜像名 #搜索镜像
- docker pull 镜像名:版本 #到中央仓库或者远程仓库拉取某个版本的镜像,没有写版本就默认拉取最新版本的
- docker rmi 镜像名:版本 | IMAGE ID #删除某镜像
- docker rmi `docker images -q` #删除所有的镜像, docker images -q 查询本地所有镜像id
2.2 docker常用操作容器命令
2.2.1 docker创建容器的方式
- docker run -id --name=容器名 镜像名:版本 #不会进入容器的方式创建容器
- docker run -it --name=容器名 镜像名:版本 /bin/bash #创建容器并进入容器内部
- docker run -id --name=容器名 -p 宿主机端口号:容器端口号 镜像名:版本
i:表示容器有无客户端连接都会一直运行着,没有i默认无连接时容器会关闭
-p :将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
d:表示后台运行
t:伪终端,进入容器时会分配一个终端用来接收命令(我也不是很理解)
/bin/bash:表示进入容器脚本文件
2.2.2 其他常用操作容器命令
- docker ps #查看正在运行的容器
- docker ps -a #查看本地所有的容器
- docker exec -it 容器名|容器ID bash #进入正在运行中的容器
- docker stop 容器名|容器ID #关闭容器
- docker start 容器名|容器ID #启动容器
- docker rm [-f] 容器名|容器ID #删除容器,有-f能删除正在运行的容器
- docker rm `docker ps -a` #批量删除容器
- docker inspect 容器名 #查看容器信息
- docker cp 容器名:容器中的文件 本地目录 把容器中的文件复制到本地
- docker logs -f 容器名|ID 持续查看容器日志
3. docker容器的数据卷
3.1 数据卷概念
数据卷其实就是宿主机中的一个目录或文件,宿主机就是容器运行之上的环境(虚拟机)。如下图所示,一个数据卷可以被多个容器挂载,一个容器也可以挂载多个数据卷。数据卷可以持久化和同步容器的数据。
3.2 配置数据卷
配置数据卷有两种方式:
- docker run -id --name=容器名 -v 宿主机目录:容器内目录 [-p 宿主机端口号:容器端口号] 镜像名:版本
- docker run -id --name=容器名(a1) -v /volume 镜像名:版本 创建数据卷容器 docker run -id --name=a2 --volumes-from a1 镜像名:版本 新的容器挂载数据卷容器
注意:目录不存在可以自动创建;数据卷容器配置时,镜像名:版本 都是相同的
4. dockerfile
4.1 镜像原理
docker镜像是由特殊的文件系统叠加而成,是一个分层文件系统,但用户只看到一个文件系统。最低端的是bootfs,并使用宿主机的bootfs;第二层是root文件系统rootfs,是基础镜像;往上就是叠加的其他镜像。
一个镜像可以放在一个镜像的上面,位于下面的镜像称为父镜像,最底部的镜像是基础镜像。所以,是因为它们基础的父镜像不同。docker加载这些安装包成为镜像时,需要先加载父镜像,所以有些镜像比实际安装包大,如下图所示,Tomcat镜像是以JDK镜像为基础的;有的父镜像复用了Linux提供的基础镜像,所以有些镜像比实际安装包小。
当一个镜像启动成容器时,docker会在最顶层加载一个读写文件系统成为容器。
4.2 docker容器转成镜像
有两种方式,第一种方式一般不用
4.2.1 docker的commit命令
- docker commit 容器id 镜像名称:版本号 将容器转成镜像
- docker save -o 压缩文件名称 镜像名称:版本号 将镜像输出成压缩文件(用来传输的)
- docker load -i 压缩文件名称 将压缩文件加载成镜像
通过commit命令提交的转换,数据卷目录不会转成镜像,但可以重新挂载到相同的数据卷,实现数据同步。
4.2.2 dockerfile文件
Dockerfile是一个文本文件,有一条条指令用来构造每一层镜像,最终构建出一个新的镜像。
4.3 Dockerfile案例
需求:定义dockerfile,发布springboot项目
实现步骤:
- 定义父镜像:FROM Java:8
- 定义作者信息: MAINTAINER 作者信息
- 将jar包添加到容器: ADD springboot.jar app.jar
- 定义容器启动执行的命令: CMD java -jar app.jar
- 通过dockerfile构建镜像: docker build -f dockerfile 文件路径 -t 镜像名称:版本号
前四步都是写作dockerfile里的内容,第五步是在Linux系统中写的操作命令。部署项目时将dockerfile文件给运维即可,也可以直接给用idea编译的jar包。
5. docker compose
5.1 docker compose概念及应用
Docker Compose是一个编排多容器的分布式部署工具,可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器! 使用步骤:
- 在compose文件定义运行环境镜像
- 使用docker-compose.yml定义组成应用的各种服务
- 运行docker-compose up 启动应用
5.2 docker-compose安装
第一种方式:
安装epel源
yum install -y epel-release
安装docker-compose
yum install -y docker-compose
第二种方式:
Linux下直接通过命令下载 ,没有配置镜像源的可能会比较慢。
# 安装
curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose