赞
踩
本文记录了本人在工作过程中使用过的docker常用命令,希望能帮助到需要的人
本文的运行环境:Ubuntu18.04.1
systemctl enable docker
sudo docker pull mysql:5.6.48
sudo docker pull mysql:5.6.48
sudo docker save -o /home/mysql_5.6.48.tar mysql:5.6.48
sudo docker load -i mysql_5.6.48.tar
sudo docker images
sudo docker rmi mysql:5.6.48
docker tag docker.io/prom/prometheus prometheus:v1
docker rmi docker.io/prom/prometheus:latest
sudo docker create -it python:3.6.5
sudo docker start 36f9696c942e
# docker run 参数 镜像名:镜像编号 命令
# --name表示容器名称 -i表示输入输出 -t表示伪终端 -d表示后台运行
# -p表示映射端口"宿主机端口:容器端口"
# -v表示数据卷"宿主机目录:容器目录"
# /bin/bash是容器内shell(如果没有/bin/bash可换成/bin/sh),也可以不要
sudo docker run --name my_test -itd -p 5000:5000 -v /home/nikolas/webapp/my_test:/home/my_test python:3.6.5 /bin/bash
# 快速创建并启动,系统自动设定名称,没有-d容器退出后,容器停止
sudo docker run -it python:3.6.5 /bin/bash
# 进入容器
sudo docker exec -it my_test /bin/bash
# 退出容器
# 进入容器后,在容器内部使用exit或ctrl+D即可
# 重启容器
sudo docker restart my_test
# 停止容器
sudo docker stop my_test
# 删除容器
sudo docker rm my_test
# 停止并删除容器
sudo docker stop my_test && sudo docker rm my_test
# 查看所有容器
sudo docker ps -a
# 查看容器内详情
sudo docker inspect my_test
# 查看容器内进程
sudo docker top my_test
# 查看容器打印的日志
sudo docker logs -f my_test
sudo docker cp /home/nikolas/data/hello.txt my_test:/home
sudo docker cp my_test:/home/hello.txt /home/nikolas/data
sudo docker export -o /home/my_test.tar my_test:v1
sudo docker import /home/my_test.tar
“export -o"和"save -o” 的区别
使用export导出的镜像只能用import导入(会丢失镜像历史)
而使用save导出的镜像只能有load导入(数据保存完整)
导出方法
# docker commit 容器名 镜像名:版本号
# -m 说明信息
# -a 用户信息
sudo docker commit -m "my test " -a "yyp" my_test my_test:v1
# mysql容器
sudo docker run --name test_mysql -itd -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6.48 /bin/bash
# python容器
sudo docker run --name test_python -itd -p 5000:5000 python:3.6.5 /bin/bash
# --link表示连接容器
# name:alias(链接的容器名:别名,name和alias可以相同),也可仅仅跟要链接的容器名
# 简单创建链接
sudo docker run -it --link test_mysql:mysql python:3.6.5 /bin/bash
# 完整创建链接
sudo docker run --name test_python -itd -p 5000:5000 --link test_mysql python:3.6.5
sudo docker exec -it test_python ping test_mysql
# --subnet表示网段是192.168.18.0/255.255.255.0,如果24变为16表示255.255.0.0
# --driver表示设置网络模式为bridge
# --gateway表示设置网关为192.168.18.1
# dev_network表示自己创建的网络名
sudo docker network create --driver bridge --subnet=192.168.18.0/24 --gateway=192.168.18.1 test_network
# --net指定在test_network网络中
# --ip表示设置ip地址为192.168.18.11
sudo docker run --name my_test --hostname www.test.com --net test_network --ip 192.168.18.11 -d --restart always --privileged=true python:3.6.5
命令形式:docker network connect 网络名 容器名
示例如下:
# 连接的话使用connect,断开的话使用disconnect
sudo docker network connect test_network my_test
# 查看docker网络模式,Docker默认网络模式是bridge网络
sudo docker network ls
# 删除网络
sudo docker network rm test_network
Docker | Docker-Compose | |
---|---|---|
概念 | 是一个供开发和运维人员开发、测试、部署和运行应用程序的容器平台(docker是一个容器平台) | 是一个用于创建和管理多容器应用程序的工具 |
创建容器数量 | 1个 | 多个 |
是否容易编辑 | 每个容器需要单独去修改 | 直接修改一个yaml文件即可 |
是否是服务 | 否 | 一个由多个容器组成的服务,依赖于docker之上 |
export PATH=$PATH:/usr/local/python3/bin
# 进入容器内app.py所在路径(假设app.py放置在/home/my_python/路径下)
cd /home/my_python/
# 杀死gunicorn
pkill -9 gunicorn
# 启动服务
gunicorn -w 4 -b 0.0.0.0:5000 app:app --timeout 6000
# 进入容器内app-1.0.0.jar所在路径(假设app-1.0.0.jar放置在/home/my_java/路径下)
cd /home/my_java/
# 启动服务
java -jar app-1.0.0.jar
# /home/nikolas/webapp/my_python为linux系统中放置服务工程文件的路径
# /home/my_python为容器内放置服务工程文件的路径
sudo docker run --name my_python -itd --restart=always --net my_net -p 5000:5000 -v /home/nikolas/webapp/my_python:/home/my_python python:3.6.5 /bin/bash
# /home/nikolas/webapp/my_java为linux系统中放置服务工程文件的路径
# /home/my_java为容器内放置服务工程文件的路径
sudo docker run -itd --name my_java --restart=always --net my_net -p 8088:8088 -v /home/nikolas/webapp/my_java:/home/my_java jdk:1.0.0
# touch命令创建
touch DockerFile
# 或者用vim命令创建
vim DockerFile
# 设置镜像(原始镜像:原始镜像版本号)
FROM python:3.6.5
# 设置作者
MAINTAINER nikolas
# 开放5000端口
EXPOSE 5000
# 执行命令
CMD ["sh", "/home/my_python/start_app.sh"]
# 设置镜像(原始镜像:原始镜像版本号)
FROM jdk:1.0.0
# 设置作者
MAINTAINER nikolas
# 开放8088端口
EXPOSE 8088
# 执行命令
CMD ["sh", "/home/my_java/start_app.sh"]
# docker build -f DockerFile文件所在路径 -t 开机自启动镜像名称:开机自启动镜像版本号
# 这里以python服务为例
sudo docker build -f ./Dockerfile -t new-python:3.6.5 .
# 查看镜像是否创建成功
sudo docker images
# 创建成功后删除容器
sudo docker stop my_python && sudo docker rm my_python
sudo docker stop my_java && sudo docker rm my_java
容器名称 | 镜像名称 | 版本号 |
---|---|---|
test_python | new_python | 3.6.5 |
test_java | new_jdk | 1.0.0 |
test_mysql | mysql | 5.7.34 |
test_redis | redis | 6.2 |
test_nginx | nginx | 1.20.0 |
# 直接用vim命令创建
vim test_system.yaml
# 搭建测试系统环境 # yaml文件版本号 version: '3.7' # yaml文件包含的容器 services: # python容器 test-python: tty: true image: new-python:3.6.5 container_name: test-python # 设置端口 ports: - 5000:5000 # 设置开机启动 restart: always volumes: - /home/nikolas/webapp/my_python:/home/my_python logging: driver: "json-file" options: max-size: "5g" # java容器 test-java: tty: true image: new-jdk:1.0.0 container_name: test-java # 设置端口 ports: - 8088:8088 # 设置开机启动 restart: always volumes: - /home/nikolas/webapp/my_java:/home/my_java logging: driver: "json-file" options: max-size: "5g" # mysql容器 test-mysql: tty: true image: mysql:5.7.34 container_name: test-mysql # 设置端口 ports: - 3306:3306 # 设置开机启动 restart: always volumes: - /home/nikolas/db_data/mysql/data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: 123456 # redis容器 test-redis: tty: true image: redis:6.2 container_name: test-redis # 设置端口 ports: - 6379:6379 # 设置开机启动 restart: always command: --requirepass 123456 # nginx容器 test-nginx: tty: true image: nginx:1.20.0 container_name: test-nginx # 设置端口 ports: - 81:81 - 446:446 # 设置开机启动 restart: always volumes: - /var/log/nginx:/var/log/nginx # yaml文件所用的网络 networks: default: external: name: my_net
# docker-compose -f yaml文件所在路径
sudo docker-compose -f /home/nikolas/yaml/test_system.yaml up -d
# docker-compose -f yaml文件所在路径
sudo docker-compose -f /home/nikolas/yaml/test_system.yaml down
当Windows系统使用Docker容器时,会出现当容器或镜像卸载时ext4.vhdx容量不释放的问题,下面是解决办法
进入wsl
wsl
查看docker 占用的空间
wsl:~$ docker system df
一键清理没用的空间
wsl:~$docker system prune
停止wsl服务
wsl --shutdown
进入磁盘管理 diskpart 选择虚拟磁盘文件 select vdisk file="C:\Users\zyc\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc\LocalState\ext4.vhdx" 将虚拟磁盘以只读模式挂载到虚拟机 attach vdisk readonly 压缩文件 compact vdisk 压缩完成后卸载磁盘 detach vdisk 退出磁盘管理 exit
编写db_run.txt和vhdx_slim.sh文件,两个文件放在同一目录下,然后运行vhdx_slim.sh即可
dp_run.txt文件
select vdisk file="E:\Documents\Docker Files\DockerDesktopWSL\data\ext4.vhdx" # ext4.vhdx文件路径
attach vdisk readonly
compact vdisk
detach vdisk
exit
vhdx_slim.sh
@echo off
wsl cd
wsl docker system df
wsl docker system prune
wsl exit
wsl --shutdown
diskpart /s .\dp_run.txt
pause
至此本文的所有内容已介绍完毕,因为还使用了nginx容器,所以还涉及到一些nginx的配置文件需要去编写。但因为nginx的相关知识不在本文所述范围内,因此本文暂不做讨论,感谢浏览本文的朋友。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。