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版本号信息

docker info
docker version

2.docker帮助命令

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

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

(二)docker镜像命令

1.查看镜像

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

docker images

Docker 常用命令大全_第1张图片

2.搜索镜像

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

docker search 镜像名

docker search chrome

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

Docker 常用命令大全_第2张图片

搜索+筛选条件

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

docker search --filter=STARS=50 chrome

3.拉取镜像

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

docker pull 镜像名称:tag

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

4.运行镜像

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

docker pull mysql

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 并交互式运行

docker pull mysql:7.5.0

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.修改容器配置

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

例如:

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

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

14.提交一个镜像

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

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

15.dockerfile

(1)环境变量

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

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

run和cmd区别

触发时机不同

RUN 在构建镜像时 即docker build

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

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

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

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

(3)其他

FROM nginx:1.20.0
COPY nginx.conf /etc/nginx/nginx.conf
COPY dist/  /usr/share/nginx/html/
COPY replace.sh /
RUN chmod 777 /replace.sh
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

version: '3'
services:
  web:
    build:
        context: ./
        dockerfile: mydockerfile

完整示例:

version: '3.8'
networks:
    test_network:
      external: true
services:
    myapidemo:
       image: 1312958948/myapidemo:1.1
       container_name: myapidemo
       build: .
       restart: always
       ports:
         - "9020:5000"
       volumes:
         - /root/apilogs/logs:/app/logs
       networks:
         - test_network
     
    nginxapi:
       image: nginx
       container_name: nginxapi
       restart: always
       ports:
         - "80:80"
         - "443:443"
       volumes:
         - /root/nginx/www:/usr/share/nginx/html 
         - /root/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf 
         - /root/nginx/logs:/var/log/nginx 
         - /root/nginx/certs:/etc/nginx/certs 
       networks:
         - test_network
         
    mysql:
       image: mysql:8.0
       container_name: mysql
       restart: always
       ports:
         - "3306:3306"         
       volumes:           
         - /var/lib/docker/volumes/mysqldata/_data:/var/lib/mysql39
       environment:
         MYSQL_ROOT_PASSWORD: Aa123456   
         MYSQL_DATABASE: MyTest
         TZ: Asia/Shanghai
       networks:
         - test_network 
     
    redistest:
       image: redis
       container_name: redistest
       restart: always
       ports:
         - "6379:6379"
       command: redis-server --requirepass 123456     
       networks:
         -  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/*’

你可能感兴趣的:(docker,容器,运维,python)