docker基本操作
编辑于 2024-11-14 21:59:50 阅读 1231
镜像
docker search nginx ⬅️来查看可用镜像
docker pull redis:latest ⬅️下载镜像
docker images ⬅️查看本地镜像
docker rmi {IMAGE_ID} ⬅️删除一个或多个镜像
docker rmi `docker images -q` ⬅️删除全部镜像
docker build -f ./Dockerfile -t php:v1-swoole .
docker rm -f $(docker ps -aq) && docker rmi -f $(docker images -q) ⬅️删除全部镜像和容器
容器
docker ps -a ⬅️查看全部容器
docker start {CONTAINER_ID} ⬅️启动容器
docker stop {CONTAINER_ID} ⬅️停止一个容器
docker restart {CONTAINER_ID} ⬅️重启一个容器
docker stop $(docker ps -q) ⬅️停止全部容器
docker rm {CONTAINER_ID} ⬅️删除一个或多个容器
docker rm $(docker ps -aq) ⬅️删除全部容器
docker stop $(docker ps -q) & docker rm $(docker ps -aq) ⬅️停用并删除全部容器
docker attach {CONTAINER_ID} ⬅️登录容器
docker exec -it {CONTAINER_ID} /bin/bash ⬅️登录容器
//将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下。
docker cp /www/runoob 96f7f14e99ab:/www/
//将容器96f7f14e99ab的/www目录拷贝到主机的/tmp目录中。
docker cp 96f7f14e99ab:/www /tmp/
本机使用容器内的命令
注意:一定要设置工作目录,否则就会在容器的默认工作目录执行
vi ~/.bashrc
alias phpunit='docker exec -it -w /var/www/project1 aaa vendor/bin/phpunit'
alias phpcomposer='docker exec -it -w /var/www/project1 aaa composer'
我有很多项目,为每个项目都设置一个命令也不现实,所以就有了下面的脚本,同样是写在~/.bashrc
# 取消之前的 composer 别名定义
unalias composer 2>/dev/null
# 定义项目根目录变量
PROJECT_ROOT="/Users/cuiwei/PhpstormProjects"
# 定义容器名称变量
CONTAINER_NAME="server-docker-php-fpm-1"
# 定义一个通用的 composer 函数
composer() {
local host_dir=$(pwd)
if [[ "$host_dir" != $PROJECT_ROOT/* ]]; then
echo "Error: You must run this command from a subdirectory of $PROJECT_ROOT, e.g., $PROJECT_ROOT/test1/."
return 1
fi
local container_dir=$(echo "$host_dir" | sed "s|^$PROJECT_ROOT|/var/www|")
echo "host_dir: $host_dir"
echo "container_dir: $container_dir"
docker exec -it -w "$container_dir" $CONTAINER_NAME composer "$@"
}
docker network
docker network ls ⬅️显示所有 bridge
docker network create --driver bridge web-network ⬅️创建一个叫做 web-network 的网桥,使用的连接方式是 bridge
docker inspect web-network ⬅️查看 web-network 网络里面的容器
docker network connect web-network {CONTAINER} ⬅️手动将某个容器加入网桥
docker run
基于一个镜像启动一个容器,如果此镜像不存在则自动下载
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h "mars": 指定容器的hostname;
-e username="ritchie": 设置环境变量;
--env-file=[]: 从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
-m :设置容器使用内存最大值;
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
--link=[]: 添加链接到另一个容器;
--expose=[]: 开放一个端口或一组端口;
--volume , -v: 绑定一个卷
docker run --name php-fpm -v C:\Users\work\nginx/www:/www -d php:fpm /bin/sh -c "while true; do echo hello world; sleep 1; done"
docker run --name php-fpm7.4 -v C:\Users\work\nginx/www:/www -d php:7.4-fpm /bin/sh -c "while true; do echo hello world; sleep 1; done"
docker run -v C:\Users\work\nginx/www:/usr/share/nginx/html:ro -v C:\Users\work\nginx/conf:/etc/nginx:ro --link php-fpm7.4 --name nginx -p 8080:80 -d nginx
docker run --name mysqld -e MYSQL_ROOT_PASSWORD=123456 -d mysql
docker run -di --name docker-php -v "C:\codebase\docker-php\app":/var/www --network web-network docker-php-image
docker run -di --name docker-nginx -p 8080:80 -v "C:\codebase\docker-php\nginx\conf.d":/etc/nginx/conf.d/ -v "C:\codebase\docker-php\app":/var/www --network web-network docker-nginx-image
docker run -di --name docker-php-fpm -v "C:\codebase\docker-php\app":/var/www --network web-network docker-php-fpm-image
docker-compose
Compose 是用于定义和运行多容器 Docker 应用程序的工具
docker-compose up -d ⬅️后台运行
docker-compose down ⬅️停止并删除`docker-compose.yml`中的所以容器,及network
docker-compose -f ./docker-compose.yml restart docker-php-fpm ⬅️重启某个服务(比如:docker-php-fpm)
docker-compose -f ./docker-compose.yml up -d docker-php-fpm ⬅️删除某个容器及镜像后需要重新构建时执行(比如:docker-php-fpm)