首页 > 其他分享 >Docker 常用命令

Docker 常用命令

时间:2022-08-14 17:26:16浏览次数:87  
标签:容器 network -- ID 常用命令 镜像 Docker docker

基本命令

安装

Centos

cd /etc/yum.repos.d
wget https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce -y

如果安装过程中报错: package docker-ce-3:19.03.5-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed,需要安装containerd.io

Ubuntu

sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

查看版本/详细信息/版本

docker -v/info/version

启动/关闭/重启

Centos

说明 命令
启动 systemctl start docker
关闭 systemctl stop docker
重启 systemctl restart docker
设置docker开机自启 systemctl enable docker
重新加载服务配置文件 systemctl daemon-reload
删除docker所有资源 docker system prune

Ubuntu

--启动/停止/重启/查看状态 
sudo service docker start/stop/restart/status

卸载

docker system prune
yum remove docker-ce
rm -rf /var/lib/docker

配置全局容器DNS

 sudo  vi /etc/default/docker

找到下面这行数据,去掉#取消注释,如果没有就手动添加

DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"

或者修改/etc/docker/daemon.json文件,没有就新增

vi /etc/docker/daemon.json

新增以下内容

{
  "dns" : [
    "172.17.45.209",
    "8.8.8.8"
  ]
}

然后重启docker

sudo service docker restart

查看docker使用资源情况

docker stats --no-stream
docker stats --no-stream --format "table {{.Name}}\t{{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}"

Daemon.json

Docker全局配置文件,默认不创建,需手动创建。位置:/etc/docker/daemon.json

镜像

拉取镜像

--不加版本号默认最新版本
docker pull mcr.microsoft.com/dotnet/core/sdk
docker pull mcr.microsoft.com/dotnet/core/sdk:3.0

创建镜像

docker build -f Dockerfile  -t  [镜像名称]  . 
  • -t代表tag,指定新的镜像的用户信息。
  • -f指定Dockerfile文件名称,默认使用当前路径的Dockerfile可以不用加此参数
  • . 是 Dockerfile 所在的路径(当前目录)

查询本地镜像

语法:docker images [OPTIONS] [REPOSITORY[:TAG]]
OPTIONS说明:

  • -a:列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层)
  • --digests:显示镜像的摘要信息
  • --no-trunc:显示完整的镜像信息
  • -q:只显示镜像ID

案例:

--查询所有镜像
docker images 
--模糊搜索(d代表名称,l代表tag)
docker images   d*:l*
--查询某个镜像
docker images   mcr.microsoft.com/dotnet/core/sdk
docker images   mcr.microsoft.com/dotnet/core/sdk:3.0
--只显示镜像ID
docker images -q mcr.microsoft.com/dotnet/core/sdk

删除镜像

docker rmi -f   [镜像ID1] [镜像ID2] [镜像ID3] ...

删除查询到的镜像

docker rmi -f $(docker images -q [镜像ID] )

删除所有镜像

docker rmi `docker images -q`

删除包含关键字的镜像(redis)

docker rmi -f `docker images | grep redis | awk '{print $3}'`

删除所有未被 tag 标记和未被容器使用的镜像

docker image prune

删除所有未被容器使用的镜像

docker image prune -a

删除名称或标签为none的镜像

docker rmi -f  `docker images | grep '<none>' | awk '{print $3}'`
docker rmi $(docker images -f "dangling=true" -q)

删除所有无用数据卷

 docker volume prune

删除 docker 所有资源

docker system prune

导出镜像

docker save -o  文件名称.tar  镜像名称/ID 
docker save  镜像名称/ID  -o  文件名称.tar
  • -o:保存路径

导入镜像

docker load -qi   文件名称.tar
  • -q:精简输出信息
  • -i:指定导入的文件

查看镜像元数据

docker inspect -s   [镜像ID]

容器

创建容器

参考链接:

创建一个立即运行的容器

docker run -p  映射端口:容器端口  [镜像ID]

创建一个后台运行的容器

docker run -d -p  映射端口:容器端口  [镜像ID] 

创建一个自定义DNS的容器

docker run --dns=8.8.8.8 --dns=8.8.4.4 -d  [镜像ID] 

创建一个共享宿主机网络和端口的容器

docker run -net host  -p 3307:3307 -d --name=web-api  [镜像ID] 

创建一个自定义名称的容器

docker run --name=web-api  [镜像ID] 

创建一个指定网络和IP的容器

docker run --net=my-network --ip 172.17.0.10 container1

开机自启

docker run --restart=always  [镜像ID] 

容器目录和宿主机目录映射(目录共享)

docker run -v /sharedfile:/sharedfile
  • 宿主机的/sharedfile目录挂载到容器的/sharedfile目录
  • 语法:/宿主机目录:/容器目录
  • docker inspect查看Mounts部分,Source为宿主机目录,Destination为容器目录

环境变量

docker run -e  "ASPNETCORE_ENVIRONMENT=development"  [镜像ID] 

run一个容器

docker run  -v /sharedfile:/sharedfile -d  -p 5000:80 -e  ASPNETCORE_URLS=http://*:80 --name=webHost --restart=always   testImages:1.0

查询容器

参考链接:

语法:docker ps [OPTIONS]OPTIONS说明:

  • -a :显示所有的容器,包括未运行的。
  • -f :根据条件过滤显示的内容。
  • -l :显示最近创建的容器。
  • -n :列出最近创建的n个容器。
  • --no-trunc :显示完成内容。
  • -q :只显示容器编号。
  • -s :显示总的文件大小。

查询正在运行中的容器

docker ps

查询所有容器

docker ps -a

通过grep内容过滤

docker ps -a | grep ID/Name/Port

容器ID进行过滤

docker ps --filter id=[容器ID]

容器名称进行过滤

docker ps --filter name=[容器名称]

查询最近创建的5个容器信息

docker ps -n 5

镜像ID进行过滤

docker ps --filter ancestor=[镜像ID]

镜像名称进行过滤

 docker ps --filter ancestor= <image-name>[:<tag>]

容器状态进行过滤

docker ps --filter status=running

状态类型:

  • created(已创建)
  • restarting(重启中)
  • running(运行中)
  • removing(迁移中)
  • paused(暂停)
  • exited(停止)
  • dead(死亡)

端口号进行过滤

docker ps -a | grep 8100

进入容器

进入容器方式1

容器必须正在运行

#进入当前容器后开启一个新的终端,可以在里面操作。(常用)
docker exec -it [容器id]  /bin/bash

进入容器之后可以使用以下命令:

  • ls:列出目录
  • vi:修改文件内容

退出容器:

  • exit
  • Ctrl + p + q

进入容器(管理员权限)

docker exec -it [容器id] -u root /bin/bash

进入容器(其他命令)

docker exec -it [容器id] /bin/sh
or
docker exec -it [容器id] bash
or
docker exec -it [容器id] sh

宿主环境执行容器内部命令

docker exec -it mysql  ls -la

安装package

需要root权限
修改镜像源可以通过查看Linux-Ubuntu-镜像源

apt-get update 
apt-get install vim

进入容器方式2

容器必须正在运行

# 进入容器正在执行某个命令的终端,不能在里面操作
docker attach  --sig-proxy=false  [容器id]

进入容器方式3-进入镜像创建的伪容器

docker run -it  [镜像ID]  /bin/bash

首先,docker run -it centos 的意思是,为centos这个镜像创建一个容器, -i和-t这两个参数的作用是,为该docker创建一个伪终端,这样就可以进入到容器的交互模式?(也就是直接进入到容器里面)后面的/bin/bash的作用是表示载入容器后运行bash ,docker中必须要保持一个进程的运行,要不然整个容器启动后就会马上kill itself,这样当你使用docker ps 查看启动的容器时,就会发现你刚刚创建的那个容器并不在已启动的容器队列中。这个/bin/bash就表示启动容器后启动bash,对指定的容器执行 bash。

进入容器后访问 URL 查看是否成功

 curl  -I  http://0.0.0.0:8001

查看容器元数据

docker inspect -s   [容器ID]

查看容器IP

docker inspect [容器ID] |grep "IPAddress"
docker inspect --format '{{.NetworkSettings.IPAddress }}'  [容器ID]
docker inspect -f '{{range .NetworkSettings.Networks}} {{.IPAddress}}{{end}}' [容器ID]

查看容器DNS

docker exec  -it  [容器ID] /bin/bash
cat /etc/default/docker

导出容器

docker export  -o  ./centos.tar   [容器ID]

导入容器

docker import centos.tar  centos:1.0

暂停/恢复/启动/停止/重启 容器

docker pause/unpause/start/stop/restart [容器ID] [容器ID]...

杀掉一个或多个运行中的容器

docker kill -s  KILL  [容器ID] [容器ID]...

删除容器

删除一个或多少容器

docker rm [OPTIONS] CONTAINER [CONTAINER...]

OPTIONS说明:

  • -f :强制删除一个运行中的容器
  • -l :移除容器间的网络连接,而非容器本身
  • -v :删除与容器关联的卷

强制删除容器

docker rm -f  [容器ID] [容器ID]...

强制删除筛选出的容器

docker rm -f $( docker ps -aq --filter id=[容器ID] )

删除所有容器

docker rm -f `docker ps -a -q`

删除所有停止运行的容器

docker container prune

删除异常停止的容器

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

容器与主机之间的文件拷贝

主机目录拷贝至容器目录

--将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下。
docker cp /www/runoob 96f7f14e99ab:/www/

--将主机/www/runoob目录拷贝到容器96f7f14e99ab中,目录重命名为www。
docker cp /www/runoob 96f7f14e99ab:/www

容器目录拷贝至主机目录

--将容器96f7f14e99ab的/www目录拷贝到主机的/tmp目录中。
docker cp  96f7f14e99ab:/www /tmp/

网络

参考文档:

创建网络

docker network create [OPTIONS] NETWORK
名称,简写 默认 说明
--attachable false 启用手动容器安装
--aux-address map[] 网络驱动程序使用的辅助IPv4或IPv6地址
--driver, -d bridge 驱动程序管理网络
--gateway 用于主子网的IPv4或IPv6网关
--internal false 限制对网络的外部访问
--ip-range 从子范围分配容器ip
--ipam-driver default IP地址管理驱动程序
--ipam-opt map[] 设置IPAM驱动程序的具体选项
--ipv6 false 启用IPv6网络
--label 在网络上设置元数据
--opt, -o map[] 设置驱动程序特定选项
--subnet 表示网段的CIDR格式的子网

创建一个网络

# 默认bridge格式创建网络
docker network create -d bridge  my-network

创建指定网段网络

# 默认bridge格式创建网络
docker network create  --subnet=172.18.0.0/16 my-network

创建指定网段网络和规定IP范围

# 默认bridge格式创建网络
docker network create  --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20  my-network

连接网络

容器连接网络后,容器通讯可以直接ping容器名称/网络别名

docker network connect [OPTIONS] NETWORK CONTAINER
名称,简写 说明
--alias 为容器添加网络范围的别名
--ip 指定IP地址
--ip6 指定IPv6地址
--link 添加链接到另一个容器
--link-local-ip 添加容器的链接本地地址

将正在运行的容器连接到网络

 docker network connect my-network container1

启动时将容器连接到网络

docker run -itd --net=my-network container1

指定容器的IP地址

docker network connect --ip 10.10.36.122 my-network container1

启动时将容器连接到网络并指定IP

docker run -itd --net my-network --ip 172.17.0.10 container1

容器创建网络别名

docker network connect --alias db --alias mysql my-network container1

一个容器与另一个容器别名链接

# container2 必须没有加入此网络,此命令运行后container2可以使用c1别名访问container1
docker network connect --link container1:c1 my-network container2

断开连接网络

docker network disconnect命令用于断开容器的网络。容器必须运行才能将其与网络断开连接。

docker network disconnect -f my-network container1

查看网络信息

docker network inspect  my-network

查看网络所有容器

docker network inspect  my-network | jq  .[].Containers

查看所有网络

docker network ls 

删除所有网络

docker network prune

删除网络

# 如果有容器连接网络需要先断开容器网络连接或删除容器再删除网络
docker network rm  my-network

标签:容器,network,--,ID,常用命令,镜像,Docker,docker
From: https://www.cnblogs.com/RainFate/p/16585807.html

相关文章

  • Docker 01
    1.Docker启动/关闭a.开启dockersystemctlstartdockerb.查看docker状态systemctlstatusdockerc.关闭dockersystemctlstopdockerd.docker开机自启动s......
  • docker swarm容器编排学习笔记
    1、介绍DockerSwarm 和DockerCompose一样,都是Docker官方容器编排项目不同点:DockerCompose是一个在单个服务器或主机上创建多个容器的工具,DockerSwarm则可以......
  • (Docker)镜像的制作与部署方式
    基于Linux的虚拟化(Docker)镜像的制作与部署方式原创 曹兆祺 风乍起带你学编程 2022-08-1323:00 发表于天津收录于合集#docker5个#镜像1个#linux3个  ......
  • 九、docker swarm主机编排
    一、什么是DockerSwarmSwarm是Docker公司推出的用来管理docker集群的平台,几乎全部用GO语言来完成的开发的,代码开源在https://github.com/docker/swarm,它是将一群......
  • 八、docker compose容器编排
    一、Docker-Compose1.1、什么是DockerComposeCompose项目是Docker官方的开源项目,负责实现Docker容器集群的快速编排,开源代码在 https://github.com/docker/comp......
  • Nuget服务器包管理常用命令
    设置KeynugetsetApiKey[Your-API-Key]-Sourcehttps://www.nuget.org/api/v2/package/打包nugetpackAliang.Common.Helper.csproj-PropConfiguration=Re......
  • 二、docker安装
    一、docker安装Docker是管理容器的工具,Docker不等于容器。1.1、dockeryum源设置#step1downloaddocker-ce.repofile[root@zutuanxue~]#wgethttps://downlo......
  • 三、docker镜像管理
    一、docker镜像管理1.1、镜像搜索-search从docker镜像仓库模糊搜索镜像用法: dockersearch镜像关键字[root@zutuanxue~]#dockersearchcentosNAMEDE......
  • docker 启动mysql:5.7
    docker启动mysql容器报错commandwas:mysqld--verbose--help--log-bin-index=/tmp/tmp.9eG6SycqdRmysqld:Can'treaddirof'/etc/mysql/conf.d/'(Errcod......
  • 个人linux下开发常用命令
    以下为个人使用的命令:文件和目录操作命令ls全拼list,功能是列出目录的内容及其内容属性信息cd全拼changediretory,功能是从当前工作目录切换到指定工作目录cp全拼......