Docker使用教程

文章目录

Docker启动和校验

python 复制代码
# 启动Docker
systemctl start docker

# 查看Docker运行状态
systemctl status docker

# 停止Docker
systemctl stop docker

# 重启
systemctl restart docker

# 设置开机自启
systemctl enable docker

# 通过运行一个简单的 Docker 容器来验证安装是否成功:
sudo docker run hello-world

镜像和容器

镜像(image) 包含了运行所需要的环境、配置、系统级函数库。
容器(container) 运行时有自己独立的环境,可以跨系统运行,也不需要手动再次配置环境了。这套独立运行的隔离环境我们称为容器。
Docker官方提供了一些基础镜像,然后各大软件公司又在基础镜像基础上,制作了自家软件的镜像,全部都存放在这个网站。Docker镜像仓库

Docker的官方文档

常见命令

注意: 可以在所有的命令后面加个 --help 获取详细用法

镜像命令 说明
docker search 查看镜像
docker pull 拉取镜像
docker images 查看本地镜像
docker rmi 删除本地镜像
docker commit 提交本地镜像
docker save 保存镜像到本地压缩文件
docker load 加载本地压缩文件到镜像
docker push 推送镜像到DockerRegistry
容器命令 说明
docker run 创建并运行容器(不能重复创建)
docker stop 停止指定容器
docker start 启动指定容器
docker restart 重新启动容器
docker rm -f 删除指定容器
docker ps -a 查看所有容器
docker logs 查看容器运行日志
docker exec -it 进入容器
docker inspect 查看容器详细信息

存储

以nginx为例进行目录挂载和卷映射

目录挂载

一切以本机挂载的目录为准,初始为空目录(不存在则自动创建) 双向绑定
本机挂载以 / 开头

sh 复制代码
docker run -d -p 80:80 \
-v /app/nghtml:/usr/share/nginx/html \
--name app \
nginx:1.26.0
sh 复制代码
# 一开始访问不到欢迎页面  因为本机 /app/nghtml 目录下没有文件
cd /app/nghtml
echo hello nginx > index.html
# 输入上述命令后可以看到页面显示 hello nginx

# 进入容器内部验证双向绑定
docker exec -it app bash
cd /usr/share/nginx/html
echo hello world >> index.html
# 输入上述命令后可以看到页面显示 hello nginx hello world

卷映射

以本机的数据为准,初始同步容器内部的数据 双向绑定
卷映射不以 / 开头 直接写卷名就可以
数据卷默认放到 /var/lib/docker/volumes/目录下

sh 复制代码
docker run -d -p 80:80 \
-v /app/nghtml:/usr/share/nginx/html \
-v ngconf:/etc/nginx \
--name app1 \
nginx:1.26.0
sh 复制代码
cd /var/lib/docker/volumes/
# 可以看到目录下有ngconf文件夹

数据卷命令

命令 说明
docker volume create 创建数据卷
docker volume ls 查看所有数据卷
docker volume rm 删除指定数据卷
docker volume inspect 查看某个数据卷的详情
docker volume prune 清除未使用的数据卷

注意:容器与数据卷的挂载要在创建容器时配置,对于创建好的容器,是不能设置数据卷的。而且创建容器的过程中,数据卷会自动创建。

网络

如果在容器运行的时候没有指定网络,则自动加入docker0网络,"Gateway": "172.17.0.1"

docker0网络 不能通过 容器名 + 端口的形式访问

网络命令

命令 说明
docker network create 创建一个网络
docker network ls 查看所有网络
docker network rm 删除指定网络
docker network prune 清除未使用的网络
docker network connect 使指定容器连接加入某网络
docker network disconnect 使指定容器连接离开某网络
docker network inspect 查看网络详细信息

自定义网络实现redis主从同步集群


sh 复制代码
# 1. 创建网络
docker network create redis

# 2. 主机
docker run -d -p 6379:6379 \
-v /app/rd1:/bitnami/redis/data \
-e REDIS_REPLICATION_MODE=master \
-e REDIS_PASSWORD=123456 \
--network redis --name redis01 \
bitnami/redis

# 3. 从机
docker run -d -p 6380:6379 \
-v /app/rd2:/bitnami/redis/data \
-e REDIS_REPLICATION_MODE=slave \
-e REDIS_MASTER_HOST=redis01 \
-e REDIS_MASTER_PORT_NUMBER=6379 \
-e REDIS_MASTER_PASSWORD=123456 \
-e REDIS_PASSWORD=123456 \
--network redis --name redis02 \
bitnami/redis

# 一开始启动容器会报错,因为需要写入数据 但是没有权限
cd /app
chmod -R 777 rd1
chmod -R 777 rd2

# 重启容器
docker restart redis01
docker restart redis02

DockerCompose

Docker Compose可以帮助我们实现多个相互关联的Docker容器的快速部署。

它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器。
docker-compose.yml文件的参考文档

yaml 复制代码
name: myblog
services:
  mysql:
    container_name: mysql
    image: mysql:8.0.32
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_DATABASE=wordpress
    volumes:
      - mysql-data:/var/lib/mysql
      - /app/myconf:/etc/mysql/conf.d
    restart: always
    networks:
      - blog

  wordpress:
    container_name: wordpress
    image: wordpress
    ports:
      - "10010:80"
    environment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_USER: root
      WORDPRESS_DB_PASSWORD: 123456
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - wordpress:/var/www/html
    restart: always
    networks:
      - blog
    depends_on:
      - mysql

volumes:
  mysql-data:
  wordpress:

networks:
  blog:
sh 复制代码
# 启动wordpress
docker compose -f compose.yaml up -d
# 关闭wordpress  不删除挂载的数据  下次启动数据一样
docker compose -f compose.yaml down
# 关闭wordpress  删除挂载的数据 下次启动没有数据
docker compose -f compose.yaml down -v

语法

docker compose [OPTIONS] [COMMAND]

类型 参数或指令 说明
Options -f 指定compose文件的路径和名称
-p 指定project名称。project就是当前compose文件中设置的多个service的集合,是逻辑概念
Commands up 创建并启动所有service容器
down 停止并移除所有容器、网络
ps 列出所有启动的容器
logs 查看指定容器的日志
stop 停止容器
start 启动容器
restart 重启容器
top 查看运行的进程
exec 在指定的运行中容器中执行命令
相关推荐
xzl041 小时前
centos yum源,docker源
linux·docker·centos
喝养乐多长不高1 小时前
深入探讨redis:哨兵模式
数据库·redis·缓存·docker·主从复制·哨兵模式
小黑屋说YYDS4 小时前
Docker常用命令介绍
运维·docker·容器
王 富贵4 小时前
docker命令
运维·docker·容器
就叫飞六吧4 小时前
Docker 挂载策略:何时使用临时容器拷贝默认配置,何时直接挂载?
运维·docker·容器
沐雨风栉5 小时前
Ubuntu+Docker+内网穿透:保姆级教程实现安卓开发环境远程部署
android·ubuntu·docker
Edward-tan7 小时前
Docker配置SRS服务器 ,ffmpeg使用rtmp协议推流+vlc拉流
docker·ffmpeg·srs·rtmp
过河不拆乔11 小时前
使用 Docker 搭建 PyWPS 2.0 服务全流程详解
docker·wps
MarkHD11 小时前
第八天 搭建车辆状态监控平台(Docker+Kubernetes) OTA升级服务开发(差分升级、回滚机制)
docker·容器·kubernetes
z日火13 小时前
将 Docker 镜像推送到 GitLab Container Registry 的完整步骤
docker·容器·gitlab