目录
文档
官方文档地址:https://docs.docker.com/get-started/
中文文档地址:https://vuepress.mirror.docker-practice.com/
安装
常规安装
见上面的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
模型
概念
镜像
镜像是原子化的 逻辑镜像=物理镜像+环境镜像+OS镜像 逻辑镜像是应用模板
容器
容器本质上是多个镜像加载到内存中的副本的组合,因此容器是OS级别的隔离,最终表现为精简的OS+运行需要的环境+对应的应用,比如tomcat容器就是精简的OS+jdk+tomcat。 镜像每次运行之后就产生一个容器,容器就是镜像实例,也就是应用。
仓库
用来存放镜像的位置,类似于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
-
数据卷
宿主机目录和容器内目录进行绑定以同步 只有在创建容器的时候才可以进行绑定
Dockerfile
Dockerfile是一个文件,内容是镜像产生需要执行的语句。 Dockerfile中一个命令或注释独占一行
- FROM
FROM 镜像名:版本
基于这个镜像进行构建,必须作为Dockerfile的第一个指令出现。
- RUN
RUN 命令
在当前工作目录下执行后面的命令
- WORKDIR
WORKDIR 目录
相当于cd到指定目录,如果这个目录不存在,它将被创建。
且进入容器时会进入到最后指定的目录
- ENV
ENV 变量=值
设置环境变量,用的时候这样:$变量。
- ADD
ADD 本地文件路径/远程文件url 容器中路径
复制本地文件或远程文件到容器指定路径的中
- CMD
CMD 命令
指定容器启动时执行的命令,只有最后一个(所有容器Dockerfile的CMD的最后一个)才会生效。
- #
注释
Docker 命令
查看docker 信息
- docker version
- docker info
镜像相关
查看docker 已经有的镜像
docker images
参数 -q (镜像id)
移除docker 镜像
docker image rm -f 镜像
docker image rm -f $(docker images -q) #删除全部镜像
从远程仓库拉镜像
docker pull 镜像
本地仓库镜像打包
docker save 镜像名/id:版本 -o 镜像包路径 打包之后的镜像就是一个文件
从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 ps 【-a】(所有容器,包括运行的和没有运行的。) 【-q】(只显示容器id)
启动容器
docker start 容器名/id
停止容器
docker stop 容器名/id
重启容器
docker restart 容器名/id
查看容器内的信息
docker inspect 容器名/id
查看日志(应用的输出)
docker logs 【-f】实时刷新 容器名/id
进入容器内部
docker exec -it 容器名/id bash
移除容器
docker rm -f 容器名 docker rm -f $(docker ps -aq) #移除所有容器
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
End~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~