一、常用命令
1. Images 镜像命令
1.查看本机中所有镜像
docker images 列出本地所有镜像
docker images -a 列出所有镜像(包含中间映像层)
docker images -q 只显示镜像id
2.搜索镜像
docker search 镜像名 去dockerhub上查询当前镜像
docker search -s 指定值 列出收藏数不少于指定值的镜像
docker search --no-trunc 显示完整的镜像信息
3.下载
docker pull 镜像名:TAG
4.删除镜像
docker rmi 镜像名 删除
docker rmi -f 强制删除
2.Contrainer 容器命令
1.运行容器
docker run 镜像名 -------------------------- 镜像名新建并启动容器
--name 别名为容器起一个名字
-d 启动守护式容器(在后台启动容器)
-p 映射端口号:原始端口号 指定端口号启动
例:docker run -it –name myTomcat -p 8888:8080 tomcat docker run -d –name myTomcat -P tomcat
2.查看运行的容器
docker ps -------------------------- 列出所有正在运行的容器
-a 正在运行的和历史运行过的容器
-q 静默模式,只显示容器编号
3.停止|关闭|重启容器
docker start 容器名字或者容器id --------------- 开启容器
docker restart 容器名或者容器id --------------- 重启容器
docker stop 容器名或者容器id ------------------ 正常停止容器运行
docker kill 容器名或者容器id ------------------ 立即停止容器运行
4.删除容器
docker rm -f 容器id和容器名
docker rm -f $(docker ps -aq) -------------------------- 删除所有容器
5.查看容器内进程
docker top 容器id或者容器名 ------------------ 查看容器内的进程
6.查看查看容器内部细节
docker inspect 容器id ------------------ 查看容器内部细节
7.查看容器的运行日志
docker logs [OPTIONS] 容器id或容器名 ------------------ 查看容器日志
-t 加入时间戳
-f 跟随最新的日志打印
--tail 数字 显示最后多少条
8.进入容器内部
docker exec [options] 容器id 容器内命令 ------------------ 进入容器执行命令
-i 以交互模式运行容器,通常与-t一起使用
-t 分配一个伪终端 shell窗口 bash
9.容器和宿主机之间复制文件
docker cp 文件|目录 容器id:容器路径 ----------------- 将宿主机复制到容器内部
docker cp 容器id:容器内资源路径 宿主机目录路径 ----------------- 将容器内资源拷贝到主机上
10.数据卷(volum)实现与宿主机共享目录
docker run -v 宿主机的路径|任意别名:/容器内的路径 镜像名
注意:
1.如果是宿主机路径必须是绝对路径,宿主机目录会覆盖容器内目录内容
2.如果是别名则会在docker运行容器时自动在宿主机中创建一个目录,并将容器目录文件复制到宿主机中
11.打包镜像
docker save 镜像名 -o 名称.tar
12.载入镜像
docker load -i 名称.tar
13.容器打包成新的镜像
docker commit -m "描述信息" -a "作者信息" (容器id或者名称)打包的镜像名称:标签
3.Network 网桥(网络)信息
1.查看网桥列表
docker network ls
2.查看网桥具体信息
docker inspect 网桥名称
3.创建一个网桥
docker network create -d bridge 网桥名称
4.删除一个网桥
docker network rm 网桥名称
4.Volume 数据卷
1.说明
数据卷
是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:
数据卷
可以在容器之间共享和重用对
数据卷
的修改会立马生效对数据卷
的更新,不会影响镜像数据卷
默认会一直存在,即使容器被删除注意:
数据卷
的使用,类似于 Linux 下对目录或文件进行 mount,镜像中的被指定为挂载点的目录中的文件会复制到数据卷中(仅数据卷为空时会复制)。
2.创建数据卷
docker volume create 卷名
3.查看数据卷
docker volume inspect 卷名
4.挂载数据卷
docker run -d -P --name web -v my-vol:/usr/share/nginx/html nginx
docker inspect web
5.删除数据卷
docker volume rm 卷名
5.Docker Compose 命令
- 后台启动 up
docker-compose up -d
- 停止 stop
docker-compose stop
- 停止 down
会删除容器及网桥, 如果网桥还有其他容器, 则会退出该网桥
docker-compose down
二、docker-compose.yml
文件详解
1.单镜像
以mysql:5.7为镜像编写的yml
脚本
yml
文件的缩进是有严格要求的, 注意语法错误
宿主机: 理论上为你安装
docker
的机器, 基本上就是你使用的服务器
docker-compose
启动后会生成一个网桥, 名称为当前文件夹名_default
, 容器之间想要通信, 则需要都在一个网桥之中
version: '3' # 这指定了使用的Docker Compose文件格式的版本。
services: # 列出了要运行的各个服务
db: # 这是一个服务的名称
image: mysql:5.7 # 镜像: 以该镜像为底, 构建容器
container_name: db # 容器名: 可以在命令中用来代表该容器
restart: unless-stopped # 指定了容器的重启策略: 这里为容器会在退出时自动重启,除非手动停止了容器
ports: # 端口映射: 定义宿主机和容器端口的对应
- "3307:3306" # 定义了端口映射,将宿主机的3307端口映射到容器的3306端口。
environment: # 定义了一些环境变量,包括MySQL的root密码、要创建的数据库名称、用户名和密码等。
MYSQL_ROOT_PASSWORD: root # 数据库的默认密码
MYSQL_DATABASE: npm_db # 创建一个npm_db数据库
MYSQL_USER: npm_user # 创建一个npm_user的用户名
MYSQL_PASSWORD: npm_pwd # npm_user的密码是npm_pwd
command: # 指定了容器启动时要运行的命令: 下面三列设置默认的身份验证插件、字符集和排序规则等
- --default_authentication_plugin=mysql_native_password
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
volumes: # 定义数据卷: 这里是将容器内的目录挂载到宿主机上,包括MySQL的数据和配置文件目录。
- ./mysql/data:/var/lib/mysql # mysql数据
- ./mysql/conf.d:/etc/mysql/conf.d # mysql配置文件
2.多镜像依赖
事实上, docker-compose
更多是用在多个镜像编排的时候. 一个完整的项目, 更多时候是由多个服务组合完成的,互相之间甚至有所依赖 . 例如WordPress
他需要mysql
, nginx
等服务一起搭配使用.
而docker-compose
使用一个命令即可让多个容器或服务, 停止或启动,大大解决项目部署的时间.
这是一个包含了nginx
和mysql
的脚本
jc21/nginx-proxy-manager: 这是一个非常好用的反向代理神器, 需要使用到
mysql
同一个
docker-compose
文件下的服务, 启动后会自动加入同一个网桥中
version: '3'
services:
db:
image: mysql:5.7
container_name: db
restart: unless-stopped
ports:
- "3307:3306"
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: npm_db
MYSQL_USER: npm_user
MYSQL_PASSWORD: npm_pwd
command:
- --default_authentication_plugin=mysql_native_password
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
volumes:
- ./mysql/data:/var/lib/mysql
- ./mysql/conf.d:/etc/mysql/conf.d
app:
image: 'jc21/nginx-proxy-manager:latest'
container_name: npm
restart: unless-stopped
ports:
- '80:80' # Public HTTP Port
- '443:443' # Public HTTPS Port
- '81:81' # Admin Web Port
environment: # 这里的环境变量主要设置的为连接数据库的相关参数,而其值即为上面mysql中设置的值
DB_MYSQL_HOST: "db" # 值即为上面container_name(db)
DB_MYSQL_PORT: 3306 # 值即为上面ports中的容器端口号
DB_MYSQL_USER: "npm_user" # 值即为上面environment(环境变量)中的MYSQL_USER
DB_MYSQL_PASSWORD: "npm_pwd" # 值即为上面environment(环境变量)中的MYSQL_PASSWORD
DB_MYSQL_NAME: "npm_db" # 值即为上面environment(环境变量)中的MYSQL_DATABASE
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
depends_on: # 指定了容器所依赖的其他服务: 值即为上面mysql的container_name(db)。这意味着在启动当前服务之前,Docker Compose会先启动db服务
- db
3.加入指定的网桥
nginx
和mysql
是比较常用的服务, 一般将其单独放在一个文件里, 如果这时候有新的服务需要用到他们, 只需加入他们的网桥即可.
networks
: 网桥相关设置, 可以加入已存在的, 也可以自己重新设置一个
重新建一个docker-compose.yml
文件
version: "3"
services:
wordpress:
image: wordpress:6.2.2
container_name: wordpress
restart: unless-stopped
#ports: wordpress 的 80端口可以通过nginx代理,故这里无需对外暴露端口号
# - "8080:80"
environment:
WORDPRESS_DB_HOST: db # 连接db数据库, 可省略3306端口, 值为 mysql 的 container_name(db)
WORDPRESS_DB_USER: xxx # 这里的三个xxx值, 则需要单独在mysql启动后, 新建好用户才行, 也可以使用root用户
WORDPRESS_DB_PASSWORD: xxx
WORDPRESS_DB_NAME: xxx
volumes:
- ./html:/var/www/html
networks:
default: # 加入已存在的网桥
external:
name: nginx_default # 需要加入的网桥名
查询nginx_default
网桥
docker inspect nginx_default
发现WordPress
已经加入该网桥了
4.使用Dockerfile
构建的镜像
这里对WordPress
默认的上传大小做一个修改
新建文件
vi Dockerfile
输入
FROM wordpress:6.2.2
EXPOSE 80
# 从自身镜像里复制一份配置
RUN cp /usr/local/etc/php/php.ini-production /usr/local/etc/php/conf.d/php.ini
# 配置php.ini
# 上传大小限制改为200M 为了上传一些比较大的主题包
RUN sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 200M/' /usr/local/etc/php/conf.d/php.ini
将目录3.加入指定的网桥
中的yml文件的image删掉, 或者注释掉, 加一个build
build
: 值为Dockerfile
的存放路径, 建议和docker-compose.yml
放在同一个目录下
version: "3"
services:
wordpress:
# image: wordpress:6.2.2
build: ./
container_name: wordpress
restart: unless-stopped
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: xxx
WORDPRESS_DB_PASSWORD: xxx
WORDPRESS_DB_NAME: xxx
volumes:
- ./html:/var/www/html
networks:
default:
external:
name: nginx_default
三、参考