Docker
安装
在测试或开发环境中 Docker 官方为了简化安装流程,提供了一套便捷的安装脚本,CentOS 系统上可以使用这套脚本安装,另外可以通过 --mirror 选项使用国内源进行安装:执行这个命令后,脚本就会自动的将一切准备工作做好,并且把 Docker 的稳定(stable)版本安装在系统中。
#下载docker
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun
#启动docker
sudo systemctl enable docker
sudo systemctl start docker
#创建docker用户组
sudo groupadd docker
#将当前用户加入docker组
sudo usermod -aG docker $USER
概念
镜像(image)
镜像是原子化的 逻辑镜像=物理镜像+环境镜像+OS镜像 逻辑镜像是应用模板
容器(container)
容器本质上是多个镜像加载到内存中的副本的组合,因此容器是OS级别的隔离,最终表现为精简的OS+运行需要的环境+对应的应用,比如tomcat容器就是精简的OS+jdk+tomcat。 镜像每次运行之后就产生一个容器,容器就是镜像实例,也就是应用。
仓库(repository)
用来存放镜像的位置,类似于maven仓库,也是镜像下载和上传的位置,有远程和本地仓库之分。
-
本地仓库
-
设置远程阿里云镜像仓库
-
1.获取镜像仓库地址
登陆阿里云控制台--->搜索容器镜像服务–-->镜像加速器–-->获取加速器地址
-
2.设置
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["镜像仓库链接"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
-
数据卷(volume)
宿主机目录和容器内目录进行绑定以同步 只有在创建容器的时候才可以进行绑定
Dockerfile
Dockerfile是一个文件,内容是镜像产生需要执行的语句。 Dockerfile中一个命令或注释独占一行
- FROM
FROM 镜像名:版本
基于这个镜像进行构建,必须作为Dockerfile的第一个指令出现。
- RUN
RUN 命令
在当前工作目录下执行后面的命令
- WORKDIR
WORKDIR 目录
相当于cd到指定目录,如果这个目录不存在,它将被创建。
且进入容器时会进入到最后指定的目录
- ENV
ENV 变量=值
设置环境变量,用的时候这样:$变量。
- ADD
ADD 本地文件路径/远程文件url 容器中路径
复制本地文件或远程文件到容器指定路径的中
- CMD
CMD 命令
指定容器启动时执行的命令,只有最后一个(所有容器Dockerfile的CMD的最后一个)才会生效。
- #
注释
架构图
docker-compose
用来启动容器,不用我们关心启动顺序了。 把它下载到/usr/local/bin目录下并改名为docker-compose,然后增加执行权限。 写好docker-compose.yml(这个文件里的内容和docker run的东西是等价的),再启动项目。
#启动项目
docker-compose
【-f docker-compose.yml的路径】
【-d 】(后台启动)
up
#关闭用docker-compose启动的所有容器
docker-compose
【-f docker-compose.yml的路径】
down
docker-compose文件模板
#docker-compose的版本
version: "3.8"
#一组容器
services:
#容器(自定义),默认生成的容器名为:项目名(docker-compose.yml所在目录的目录名)_容器_序号。
container1:
#镜像
image: image1
#通过Dockerfile构建镜像然后运行
build: /dir/of/Dockerfile
#容器名
container_name: container-name
#端口映射(可多个) 宿主主机端口:容器端口
ports:
- 80:80
#数据卷(可多个) 宿主主机文件(必须已存在):容器文件
volumes:
- /path/in/host:/path/in/container
#环境变量(可多个)
environment:
- var=value
#覆盖容器启动时执行的命令
command: new-command
#先启动这些,再启动本身.
depends_on:
- 服务1
Docker相关命令
镜像相关
-
查看已有的镜像
docker images 【-q】只显示image-id -
移除镜像
docker image rm -f 镜像 docker image rm -f $(docker images -q) #删除全部镜像 -
从远程仓库拉取镜像到本地仓库
docker pull 镜像 -
本地仓库镜像打包
docker save 镜像名/id:版本 -o 镜像包路径 打包之后的镜像就是一个文件 -
镜像包导入本地仓库
docker load -i 镜像包路径 -
从Dockerfile构建镜像
docker build -t 镜像名:版本 -f Dockerfile路径 上下文目录(里面存放了构建需要的文件,Dockerfile里面需要复制的文件都是以这个目录为当前目录的,且路径不能写出这个目录。)容器相关
-
利用镜像创建并启动容器
docker run 【-d】(后台运行) 【-p 宿主机端口:容器所在OS端口】(宿主机端口和容器所在OS端口映射) 【--name 名字】(给容器命名) 【-v 宿主机目录绝对路径/任意别名:容器内目录路径】 (数据卷(volume),即宿主机目录和容器内目录进行绑定以同步。 如果宿主机目录路径是绝对路径,则创建容器时宿主机目录会覆盖容器内目录;如果是别名则会在创建容器时自动在宿主机中创建一个目录,并将容器目录文件复制到宿主机中(/var/lib/docker/volumes/别名/_data)。) 【-e var=value】(传递需要的环境变量(参数)) 镜像 【容器启动时执行的命令】(一般会有默认的命令) 需要绑定的文件: mysql:数据文件 /var/lib/mysql nginx:配置文件 /etc/nginx/nginx.conf 数据文件 /usr/share/nginx/xxx redis:数据文件 /data 配置文件(自己定义) 一般路径为 /etc/redis-6.0.6/redis.conf 需要的环境变量(参数): mysql: MYSQL_ROOT_PASSWORD=密码(设置mysql中root的密码) -
移除容器
docker rm -f 容器名 docker rm -f $(docker ps -aq) #移除所有容器 -
进入容器
docker exec -it 容器名/id bash -
复制文件
docker cp 容器名/id:文件路径 文件路径 #从容器复制文件到宿主主机 docker cp 文件路径 容器名/id:文件路径 #从宿主主机复制文件到容器 -
查询容器
docker ps 【-a】(所有容器,包括运行的和没有运行的。) 【-q】(只显示容器id) -
启动容器
docker start 容器名/id -
停止容器
docker stop 容器名/id -
重启容器
docker restart 容器名/id -
查看容器内应用的信息
docker inspect 容器名/id -
将容器提交为镜像添加到本地仓库中
docker commit 容器名/id 镜像名:版本 -
查看日志
这里的日志就是应用的输出
docker logs 【-f】实时刷新 容器名/id