官方安装方式
https://docs.docker.com/engine/install/centos/
通用所有平台安装方式
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh –mirror Aliyun
启动docker
sudo systemctl enable docker
sudo systenctl start docker
# https://y4tay211.mirror.aliyuncs.com 可以在阿里云 容器镜像服务->镜像工具->镜像加速器 中找到自己的网址
sudo vim /etc/docker/daemon.json
{
"registry-mirrors":["https://y4tay211.mirror.aliyuncs.com"]
}
sudo systemctl daemon-reload
sudo systemctl restart docker
查看镜像
docker images 或者 docker image ls
拉取镜像
docker pull 镜像名称:版本号
运行镜像
docker run 镜像id|镜像名称:tag # 无法外部访问
docker run -it -p 宿主机端口:docker容器端口 - -name 别名 镜像id或镜像名称 命令
删除镜像
docker rmi 镜像名称|镜像id 或者 docker image rm 镜像名称|镜像id
批量删除镜像
docker images rm -f $(docker images -q)
只查看镜像id
docker images -q 或者 docker images 镜像名 -q
概述
查看运行的容器
docker ps -a
创建容器
docker create name或者imagesid
-t:分配一个虚拟终端
-i:即使没有链接也保持STDIN打开
--name : 为容器起名,如果不加将会随机产生一个名称
删除容器
docker container rm 容器id
docker rm 容器名称或者容器id
启动容器(启动停止的容器)
docker start 容器名称或者容器id
-a:将结果输出到当前进程
-i:
暂停容器
docker pause 容器名称或者容器id
恢复容器
docker unpause 容器名称或者容器id
停止容器
docker stop 容器名或容器id
docker kill 容器名或容器id
创建并启动容器
docker run -it - -name 别名 镜像id或镜像名称 命令
-d:后台启动
-p:端口映射
连接容器(进入容器)
docker attach 容器名称或容器id
docker exec -it 容器id 命令 # 建议使用这个
导出容器
docker export 容器id或名称 -o 要保存的文件名
将容器加载为镜像
docker commit 容器id或名称 镜像名:版本号
查看容器的日志
docker logs -f 容器名称或者容器id
-f:实时打印日志
-t:显示日期
容器与宿主间的文件拷贝
docker cp 容器id|name:容器文件目录 宿主机目录
查看容器内的进程
docker top 容器id|name
查看容器内的详细信息
docker inspect 容器id|name
容器保存和加载
docker save 镜像名:Tag -o 镜像名-tag.tar
#
加载镜像docker load -i 镜像名-tag.tar
同一网桥的容器都可以使用容器的名称作为容器ip进行通信。使用容器名称必须自定义网桥,不能是默认的网桥docker0
docker中网桥类型:bridge :桥接 host:仅主机模式 none:不使用任何网络
创建网络
docker network create -d 类型 名称
定制bridge网络
docker network create --subnet 192.168.0.0/16 --ip-range 192.168.8.0/24 --gateway 192.168.8.1 custom-bridge
删除网络
docker rm 网络id或名称
docker network rm 网络id或名称
查看网络
docker network ls
查看网络信息
docker network inspect 网络id或名称
启动容器指定网路
docker run -itd --network 网络名称
启动后加入到网桥中
docker network connect 网络id或名称 容器name|id
查询数据卷映射路径
docker volume inspect 数据卷name|id
docker inspect 数据卷name|id
docker run -dit -v 主机的绝对路径目录:容器中的绝对路径目录 镜像id或名称
使用别名的方式这只数据卷
docker run -v 别名:容器绝对路径
别名如果存在,docker直接使用,如果不存在自动创建,保存在/var/lib/docker/volumes
下
使用别名的方式保留容器路径原始内容,前提别名路径不能存在内容
volume对象挂载数据卷
docker run -dit -v volume对象名称:容器中的路径 镜像id或名称
MySQL服务
启动mysql服务
docker run -it -d -p 3306:3306 -v mysqlData:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root用户密码 --restart=always --name mysql 容器id|name
–restart=always:总是启动,docker服务重启即mysql也会重启
mysql容器默认存储数据路径:/var/lib/mysql
数据备份(以sql语句导出)
备份所有数据
docker exec mysql容器的id sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /root/all-databases.sql
备份指定库的数据
docker exec mysql容器的id sh -c 'exec mysqldump --databases 库名 -uroot -p"$MYSQL_ROOT_PASSWORD"' > /root/all-databases.sql
只要结构不要数据
docker exec mysql容器的id sh -c 'exec mysqldump --no-data --databases 库名 -uroot -p"$MYSQL_ROOT_PASSWORD"' > /root/all-databases.sql
redis服务
持久化开启redis服务
docker run -itd -p 6379:6379 -v /root/data/redisData:/data --name redis --restart=always 容器name:tag|id redis-server --appendonly yes
自定义配置文件启动redis
docker run -itd -p 6379:6379 -v 宿主机配置文件路径:自定义容器配置文件路径 -v /root/data/redisData:/data --name redis --restart=always 容器name:tag|id redis-server 自定义容器配置文件路径
简介
Dockerfile就是镜像的描述文件,用来构建镜像
格式
每条保留字指令都必须大写,切后面都要跟至少一个参数
指令按照从上到下,顺序执行
#
表示注释每条指令都会创建一个新的镜像层,并对镜像进行提交
Dockerfile保留命令
保留字 | 作用 |
---|---|
FROM | 当前镜像是基于哪个镜像的,第一个指令必须是FROM |
MAINTAINER | 镜像维护者的姓名和邮箱地址 |
RUN | 构建镜像时需要运行的指令 |
EXPOSE | 当前容器对外暴露的端口号 |
WORKDIR | 指定在创建容器后,终端默认登录进来的工作目录,一个落脚点 |
ENV | 用来构建镜像过程中设置的环境变量 |
ADD | 将宿主机目录下的文件拷贝进镜像切ADD命令会自动处理URL和解压tar |
COPY | 类似于ADD,拷贝文件和目录到镜像中将从构建上下文目录中原路径的文件/目录复制到新的一层镜像内的目标路径位置 |
VOLUME | 容器数据卷,用于数据保存和持久化工作 |
CMD | 指定一个容器启动时要运行的命令,Dockerfile中可以有多个CMD指定,但只有最后一个生效,CMD会被docker run之后的参数替代 |
ENTRYPOINT | 指定一个容器启动时要运行的命令,ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及其参数 |
构建镜像
创建Dockerfile文件
编写内容
使用以下命令构建
docker build -t 镜像名称 Dockerfile文件路径 # 必须在Dockerfile目录文件中使用该命令
定义和运行多个docker容器的应用,同时可以对多个容器进行编排
安装
https://docs.docker.com/compose/install/compose-plugin/#installing-compose-on-linux-systems
格式
version: "3.0"
volumes:
data: # 自动创建数据卷形式,先声明
external: # 使用自定义卷名,必须选创建才能使用
false
services:
nginx:
image:
container_name: # 容器名称
ports:
- "80:80" # 端口
volumes:
- "path:path" # 数据卷
- "data:path"
environment: # 环境
- ""
networks:
- nginx # 网络名称
command: "" # 要执行的命令
depends_on: # 代表这个容器必须依赖哪些容器启动之后才能启动
- mysql # 服务名称
- nginx
healthcheck: # 心跳检查
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 1m30s
timeout: 10s
retries: 3
start_period: 40s
sysctls: # 用来修改容器中系统内部参数, 并不是必须,有些服务启动受容器内操作系统参数显示可能会无法启动必须通过修改容器参数才能启动
-
ulimits: # 修改系统容器内部进程数限制
nproc: 65535
nofile:
soft: 20000
hard: 40000
networks:
nginx: # 网络名称
bridge: # 网络类型, 默认bridge
build指令
用来将指定dockerFile打包成对应的镜像,然后再运行该镜像
格式
version: "3.0"
services:
demo:
build:
context: demo # 指定上下文目录Dockerfile所在目录
dockerfile: Dockerfile # 编写的Dockerfile文件名
container_name:
注意
如果文件的名称是docker-compose.yaml
,可以直接使用以下命令
docker-compose up -d
如果文件名称不是,使用-f
指定文件名
docker-compose up -f 文件名称 -d
docker run -itd -p 8000:8000 -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data --name portainer --restart=always portainer/portainer
http://宿主机ip:9000
查看可视化界面