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 在指定的运行中容器中执行命令
相关推荐
小Tomkk4 小时前
Docker 部署教程jenkins
docker·容器·jenkins
Dusk_橙子5 小时前
在K8S中,如何把某个worker节点设置为不可调度?
云原生·容器·kubernetes
慕雪华年16 小时前
【Docker】dockerfile识别当前构建的镜像平台
运维·docker·容器
烛.照10319 小时前
docker安装emqx
docker·容器·emqx
蓝染k9z21 小时前
在Ubuntu上使用Docker部署DeepSeek
linux·人工智能·ubuntu·docker·deepseek+
张文君1 天前
docker直接运行arm下的docker
arm开发·docker·容器
Linux运维老纪1 天前
K8s之Service详解(Detailed Explanation of K8s Service)
服务器·网络·云原生·容器·kubernetes·云计算·运维开发
月上柳青1 天前
docker gitlab arm64 版本安装部署
docker·容器·gitlab
飞火流星020271 天前
docker安装Redis:docker离线安装Redis、docker在线安装Redis、Redis镜像下载、Redis配置、Redis命令
redis·docker·docker安装redis·redis镜像下载·redis基本操作·redis配置