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 在指定的运行中容器中执行命令
相关推荐
PolarisHuster27 分钟前
如何查看k8s获取系统是否清理过docker镜像
docker·容器·kubernetes
matrixlzp32 分钟前
K8S Secret 快速开始
云原生·容器·kubernetes
一只特立独行的猫2 小时前
Docker与Vmware网络模式的对别
网络·docker·容器
GoodStudyAndDayDayUp2 小时前
docker拉取国内镜像
运维·docker·容器
中草药z2 小时前
【Docker】Docker拉取部分常用中间件
运维·redis·mysql·docker·容器·nacos·脚本
和计算机搏斗的每一天4 小时前
k8s术语之Replication Controller
java·容器·kubernetes
yunson_Liu4 小时前
prometheus手动添加k8s集群外的node-exporter监控
容器·kubernetes·prometheus
艾德金的溪5 小时前
【docker】启动临时MongoDB容器、挂载数据卷运行数据库服务,并通过备份文件恢复MongoDB数据库备份数据
数据库·mongodb·docker
兔兔爱学习兔兔爱学习10 小时前
Linux部署ragflow,从安装docker开始~
linux·docker
Herry_64428082511 小时前
k8s集群环境部署业务系统
云原生·容器·kubernetes