Administrator
Administrator
Published on 2025-01-20 / 29 Visits
0
0

Docker(Desktop)和Docker Compose基本使用

docker用于管理单个容器,而docker compose主要用于多个容器之间融合、协作、通信(例如phpmyadmin+mysql),compose就是组合的意思,允许使用YAML配置文件来定义应用程序中的所有服务(配置每个容器的版本、数据卷、网络、环境变量、映射文件等),允许通过单个命令停目或启动整个应用。

安装docker desktop后,其中包含了docker和docker compose

Containers:容器

Images:镜像

Volumes:数据卷

Tag:标签,镜像的版本号

镜像比作是安装Windows系统时的iso文件或者软件安装包,容器则是已经安装在硬盘中的系统或者安装完成的应用程序目录,一个安装包可以安装多次(安装在不同目录)。volumes的作用是持久化、可共享的数据卷,容器运行时的数据不是持久化的。

一个镜像可以运行多次(产生多个容器),容器运行时会产生数据,volumes可以用于存储产生的数据,并且volumes可以在多个容器之间共享。

Docker

docker desktop

docker desktop支持windows10/11、macos、linux,通过wsl在windows上运行Linux子系统(需要在主板BIOS中启用虚拟化选项VT-x)

docker常用命令行

镜像相关

查看一个镜像的所有tags可以进入网页https://hub.docker.com/,右上方搜索,在结果列表中点击自己需要的镜像,再点击tags

docker -v #查看基本的版本信息

#查看docker的详细信息
docker info
docker version

#在仓库中搜索镜像
docker search mysql
docker search mysql --limit 10 #最多10条结果
docker search mysql --filter "is-official=true" #只显示官方发布镜像

#拉取镜像,docker pull <image-name>:<tag>,tag默认为latest(最新的)
docker pull mysql
docker pull mysql:8.0
docker pull mysql:9.1.0-oracle

#查看所有镜像
docker image list
docker image ls
docker images

docker rmi <image-name> #移除镜像

容器相关

docker network ls #查看所有网络
docker network create my_network #创建一个网络

docker ps #列出所有运行中的容器
docker ps -a #列出容器,包含已停止的

docker rm -f <container-id | container-name> #移除容器

#操作已存在的容器
docker start <container-id 或 name> #运行
docker stop <container-id 或 name> #停止
docker restart <container-id 或 name> #重新启动



#创建并运行容器
docker run -d -p 13306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql2025 mysql:9.0.1-oracle
#-d, -detach 后台运行
#--name mysql2025 表示容器名称
#-p 13306:3306 表示将容器中的3306端口映射到宿主机上的13306上,如果有多个端口,则写多个-p
#-P 将所有容器开放的端口映射到宿主机的随机端口上
#-e MYSQL_ROOT_PASSWORD=123456 设置环境变量MYSQL_ROOT_PASSWORD的值为123456
#--network my_network 为容器指定网络,当多个容器之间需要连接时,用这个参数让多个容器使用相同网络
#-v <宿主机文件或目录的绝对路径>:<容器绝对路径>,将本机路径挂载到容器中,比如某个配置文件就可以在本地上维护/编辑

docker下安装mysql+phpmyadmin

在相同网络下时,PHPMYADIN的HORT指定为mysql的容器名称就可以了

docker network create my_network

docker run -d --name mysql202501 -p 13306:3306 -e MYSQL_ROOT_PASSWORD=123456 --network my_network mysql

docker run -d --name phpmyadmin202501 -p 8080:80 --network my_network -e PMA_HOST=mysql202501 -e PMA_PORT=3306 -e PMA_USER=root -e PMA_PASSOWRD=123456 phpmyadmin

访问http://localhost:8080,就可以进入phpmyadmin(进入就是已经登录状态)

docker下安装nginx

将本地目录/hostpath/www挂载到容器目录/usr/share/nginx/html,可以把网页文件放到本地目录中了

/hostpath/nginx.conf挂载到/etc/nginx/nginx.conf

docker pull nginx

docker run -d --name nginx202501 -p 8080:80 -v /hostpath/www:/usr/share/nginx/html -v /hostpath/nginx.conf:/etc/nginx/nginx.conf nginx

Docker Compose

  • 如果镜像不存在,则会先pull。

  • 配置文件名固定为docker-compose.yaml或docker-compose.yml

命令

需要在存放yaml文件的目录执行

#创建&运行
docker-compose up -d
# -d 后台运行
# --build 运行容器前先构建镜像
# --no-build: 启动容器时不构建镜像,使用已有的镜像。
# --force-recreate: 强制重新创建容器,即使配置和镜像没有变化。
# --no-recreate: 如果容器已经存在,不重新创建它。
# --remove-orphans: 移除未在 docker-compose.yml 文件中定义的容器。

#启动、停止、重启
docker-compose start
docker-compose stop
docker-compose restart

#停止&删除
docker-compose down           # 停止并删除服务
docker-compose down --volumes # 删除服务并删除相关卷
docker-compose down --rmi all # 删除服务并删除相关镜像


#查看
docker-compose ps          # 显示当前运行的容器状态
docker-compose ps --all    # 显示所有容器状态(包括已停止的)
docker-compose ps --services # 只显示服务名称

配置文件

version: '3'

services:
    pma:
        image: phpmyadmin:latest
        container_name: pma2025
        ports: 
            - 8080:80
        environment:
            PMA_HOST: mysql2025
            PMA_PORT: 3306
            PMA_USER: root
            PMA_PASSWORD: 123456
        networks:
            - pma_sql
        volumes:
            - ./pma_html:/var/www/html #用宿主机的目录做持久化存储
    mysql:
        image: mysql:latest
        container_name: mysql2025
        environment:
            - MYSQL_ROOT_PASSWORD=123456
        networks:
            - pma_sql
        volumes:
            - mysql_data:/var/lib/mysql #用命名卷做持久化存储

volumes:
    mysql_data: #创建名为mysql_data的数据卷

networks:
    pma_sql:
        driver: bridge


Comment