当前位置:   article > 正文

Docker 常用命令大全_docker的常用命令

docker的常用命令

目录

一、Docker

(一)Docker基础命令

(二)docker镜像命令

(三)docker容器命令

(四)docker运维命令​​​​​​​


一、Docker

容器是一种虚拟化技术,容器是镜像实例化对象,就像Java编译后Class构造出的一个个实例对象,本文除了生硬命令大全,还会穿插一些个人对docker的理解。

什么是 Docker? - 知乎

(一)Docker基础命令

1.docker程序操作

(1)启动docker

systemctl start docker

(2)停止docker

systemctl stop docker

(3)重启docker

systemctl restart docker

(4)随服务启动而自启

systemctl enable docker

(5)查看运行状态

systemctl status docker

(6)查看docker版本号信息

  1. docker info
  2. docker version

2.docker帮助命令

使用场景:忘记docker命令参数有哪些

docker --help
docker pull --help
docker push --help

(二)docker镜像命令

1.查看镜像

使用场景:查看当前服务器中docker 镜像列表

docker images

2.搜索镜像

使用场景:查找可安装的镜像和版本

  1. docker search 镜像名
  2. docker search chrome

镜像名、描述、关注star数量、是否官方

搜索+筛选条件

例如:筛选stars数量在大于50的镜像

docker search --filter=STARS=50 chrome

3.拉取镜像

使用场景:从docker hub或公司内部镜像hub,下载镜像到本地

docker pull 镜像名称:tag

备注:没有tag默认拉取最新,等同于 docker pull mysql:latest

4.运行镜像

使用场景:拉取一个mysql镜像,运行镜像容器

  1. docker pull mysql
  2. docker run -it -d --name testmysql -p 8081:8080 mysql:latest

参数说明

参数说明
-it与容器进行交互式启动
-d        可后台运行容器
--name给运行的容器自定义命名
-p

端口映射

-p 宿主机端口:容器内端口

--restart=always自启动容器

5.容器操作

(1)停止容器

docker stop 容器ID 或 容器名称

(2)启动容器

docker start 容器ID 或 容器名称

(3)重启容器

docker restart 容器ID 或 容器名称

(4)删除容器

docker rm -f 容器ID 或 容器名称

删除容器前,需要先停止容器,运行中的容器无法删除。

6.删除镜像

docker rmi -f 镜像ID/镜像名称

删除多个镜像

docker rmi -f 镜像ID/镜像名称 镜像ID/镜像名称 镜像ID/镜像名称

强制删除镜像

docker image rm 镜像ID/镜像名称

7.保存镜像

使用场景:想将本地镜像保存为tar压缩文件,方便用于镜像转移至其他机子上,并 加载这个保存的镜像。

docker save  镜像ID/镜像名称 -o 镜像保存位置路径

例如:保存mysql镜像到当前路径位置,文件名为:mysql-20230314.tar

docker save mysql -o ./mysql-20230314.tar

8.加载镜像

使用场景:保存的镜像文件,进行加载恢复(解压tar文件)

docker load -i ./mysql-20230314.tar

我们把解压的镜像 run下

docker run mysql-20230314

9.镜像标签   tag

使用场景:有时候,我们需要对一个已有的镜像进行分类或者版本迭代,相对已有的镜像进行打标签标注版本。

docker tag 源镜像名:原tag  新镜像名:新tag

例如:将mysql最新版,打tag为测试环境1.0.0

docker tag mysql:latest mysql:test-1.0.0 

(三)docker容器命令

1.查看正在运行的容器

使用场景:

docker ps

2.查看所有容器(含已停止的容器)

docker ps -a

3.运行一个容器

docker run -it -d --name 容器名称 -p 宿主机端口号:容器端口号  镜像名:tag  /bin/bash

例如: 拉取mysql镜像,并启动一个mysql 把它取别名为mysql-test 并交互式运行

  1. docker pull mysql:7.5.0
  2. docker run -it -d --name mysql-test -p 8081:8080 mysql:7.5.0 /bin/bash

备注:宿主机 端口有时候可能被占用,需要查看端口占用 情况。

linux

netstat -untlp

mac

lsof -i tcp:8080

杀进程

kill -9 进程号

每个容器都是独立安全应用,并相互隔离,容器与宿主机端口建立绑定关系(容器端口映射),那么访问宿主机的该端口,就可以访问到对应容器。

4.端口映射

使用场景:拉取镜像,运行容器,设置容器端口和宿主机端口映射关系。

例如:

启动mysql镜像,容器命名为mysql-test 映射宿主机端口8081和容器端口8080,当 我们访问8081相当于访问到容器mysql-test

docker run -it -d  --name mysql-test -p 8081:8080 mysql:latest /bin/bash

容器端口如果被其他容器占用,如何修改?

方式一:进入容器内,修改配置文件

docker exec -it 容器ID/容器名词词 /bin/bash

方式二:进入容器内

docker attach 容器ID/容器名称 /bin/bash

进入容器内部后退出容器内部

exit

(1)启动容器

docker start 容器ID/容器名称

(2)停止容器

docker stop 容器ID/容器名称

(3)重启容器

docker restart 容器ID/容器名称

(4)杀掉容器

docker kill 容器ID/容器名称

5.容器文件拷贝

使用场景:

容器内部拷出文件

docker cp 容器ID:容器内部路径 容器外部路径

容器外部拷入文件

docker cp 容器外部路径 容器ID:容器内部路径

6.查看容器日志

使用场景:

docker logs -f --tail=日志数量 容器ID/容器名称
docker logs -f --tail=10 ef4ccceb9b6b
docker logs --tail=10 ef4ccceb9b6b

7.容器数据挂载

使用场景:以防容器销毁删除,造成数据丢失,将容器内数据挂载到宿主机对应位置

-v 宿主机文件存放位置:容器内文件位置

如此操作,就将容器内指定文件 挂载 宿主机对应位置,-v可多次使用,即一个容器可同时挂载多个文件到宿主机上。

12.更换容器名称

使用场景:容器已启动,不想删除重启容器情况下进行容器重命名。

docker rename 容器ID 新容器名称

13.修改容器配置

使用场景:不想删除容器,又想让容器配置变更。

例如:

修改参数,设置开机启动。

  1. docker update --restart=always 容器ID或容器名称
  2. docker container update --restart=always 容器ID或容器名称

14.提交一个镜像

使用场景:在已有镜像基础上,做了一些修改,希望保存封装成一个新的镜像。

docker  commit -m=”提交信息“ -a=”作者信息“ 容器ID/容器名称  提交后的新镜像名称:tag

15.dockerfile

(1)环境变量

在dockerfile中定义系统环境变量名和值,在项目代码中通过获取环境变量函数,来接收参数变量(获取系统环境变量名的值)

  1. FROM python:3.7.4
  2. MAINTAINER jack
  3. ENV webhook_url=https://oapi.dingtalk.com/robot/send?access_token=xxx
  4. ENV secret_token=xxx
  5. ENV check_interval=60
  6. ENV db_username=root
  7. ENV db_password=abc123456
  8. ENV db_host=127.0.0.1
  9. ENV db_port=3306
  10. ENV db_name=tonghuashun
  11. COPY . /tonghuashun
  12. workdir /tonghuashun
  13. run pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
  14. cmd ["python","main.py"]

run和cmd区别

触发时机不同

RUN 在构建镜像时 即docker build

CMD 在运行容器时(打完镜像后运行容器时)即docker run

  • 在Python项目代码中获取环境变量
  1. import os
  2. EN_DB_USERNAME=os.getenv("db_username")
  3. EN_DB_PASSWORD=os.getenv("db_password")
  4. EN_DB_HOST=os.getenv("db_host")
  5. EN_DB_PORT=os.getenv("db_port")
  6. EN_DB_NAME=os.getenv("db_name")
  • 在NodeJS项目代码中,获取环境变量
process.env.NODE_ENV //获取对应环境变量的值
  • 在Golang项目代码中,获取环境变量
  1. package main
  2. import ( "fmt" "os")
  3. func main() {
  4. name := os.Getenv("NAME")
  5. fmt.Println("name is:", name)}

(2)docker run时传入环境变量参数

docker run -p 9000:9000 -e environment=dev -e cluster=0 -d me/app   

(3)其他

  1. FROM nginx:1.20.0
  2. COPY nginx.conf /etc/nginx/nginx.conf
  3. COPY dist/ /usr/share/nginx/html/
  4. COPY replace.sh /
  5. RUN chmod 777 /replace.sh
  6. CMD ["/replace.sh"]

COPY 当前dockerfile目录 的文件名 nginx.conf、文件夹dist、文件replace.sh 复制到容器指定目录中。

RUN 在docker build时运行 (打镜像时)

CMD 在docker run时运行(运行容器时)

16.docker-compose

docker-compose.yml 文件分为三个主要部分:services、networks、volumes

  • services:主要用来定义各个容器
  • networks:定义需要使用到的network
  • volumes:定义services使用到的volume 本地数据卷

参数说明

参数说明
version 版本
build

使用当前目录下的Dockerfile进行构

image

指定运行容器使用的镜像

container_name

默认运行出来的容器名称
command

覆盖容器启动后默认执行的命令Dockerfile定义的CMD

注意:当Dockerfile定义了entrypoint的时候,docker-comose.yml定义的command会被覆盖

enrtypoint

执行命令行,可以覆盖Dockerfile中定义的entrypoint命令

links

链接到其它服务中的容器。

使用服务名称(同时作为别名)或服务名称:服务别名 (SERVICE:ALIAS) 格式都可以

例如:

version: '3'

services: order-service links: - user-service - pay-service - redis

external_links

链接到 docker-compose.yml 外部的容器,参数格式跟 links 类似。

prot

暴露容器端口信息

expose

指定内部端口,但不映射到宿主机,只被连接的服务访问。

enviroment

定义的变量会覆盖.env文件中定义的重名环境变量。

ports

将容器的端口80映射到宿主机的端口8080

volumes

设置容器的数据卷路径

networks

容器使用的网络设置。

depends_on

基于云镜像

基于本地dockerfile

  1. version: '3'
  2. services:
  3. web:
  4. build:
  5. context: ./
  6. dockerfile: mydockerfile

完整示例:

  1. version: '3.8'
  2. networks:
  3. test_network:
  4. external: true
  5. services:
  6. myapidemo:
  7. image: 1312958948/myapidemo:1.1
  8. container_name: myapidemo
  9. build: .
  10. restart: always
  11. ports:
  12. - "9020:5000"
  13. volumes:
  14. - /root/apilogs/logs:/app/logs
  15. networks:
  16. - test_network
  17. nginxapi:
  18. image: nginx
  19. container_name: nginxapi
  20. restart: always
  21. ports:
  22. - "80:80"
  23. - "443:443"
  24. volumes:
  25. - /root/nginx/www:/usr/share/nginx/html
  26. - /root/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf
  27. - /root/nginx/logs:/var/log/nginx
  28. - /root/nginx/certs:/etc/nginx/certs
  29. networks:
  30. - test_network
  31. mysql:
  32. image: mysql:8.0
  33. container_name: mysql
  34. restart: always
  35. ports:
  36. - "3306:3306"
  37. volumes:
  38. - /var/lib/docker/volumes/mysqldata/_data:/var/lib/mysql39
  39. environment:
  40. MYSQL_ROOT_PASSWORD: Aa123456
  41. MYSQL_DATABASE: MyTest
  42. TZ: Asia/Shanghai
  43. networks:
  44. - test_network
  45. redistest:
  46. image: redis
  47. container_name: redistest
  48. restart: always
  49. ports:
  50. - "6379:6379"
  51. command: redis-server --requirepass 123456
  52. networks:
  53. - test_network

(四)docker运维命令

1.查看docker工作目录

sudo docker info | grep ”Docker Root Dir“

2.查看docker磁盘占用总体情况

du -hs /var/lib/docker

3.查查看docker磁盘使用具体情况

docker system df

4.删除无用容器和镜像

(1)删除异常停止的容器

docker  rm `docker ps -a | grep. Exited | awk '{print $1}'`

5.查找大文件

find / -type f -size +100M -print0 | xargs -0 du -h |sort -nr

6.查找指定docker使用目录下大于指定大小文件

例如:

这边查查查找到事‘/var/lib/docker/overlay2/*’开头且文件大小大于100MB的文件

find / -type f -size +100M -print0 | xargs -0 du -h |sort -nr | grep ‘/var/lib/docker/overlay2/*’

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/74010
推荐阅读
相关标签
  

闽ICP备14008679号