Docker(二):Docker常用命令

最全的Linux教程,Linux从入门到精通

======================

  1. linux从入门到精通(第2版)

  2. Linux系统移植

  3. Linux驱动开发入门与实战

  4. LINUX 系统移植 第2版

  5. Linux开源网络全栈详解 从DPDK到OpenFlow

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

第一份《Linux从入门到精通》466页

====================

内容简介

====

本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。

需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

stop Stop one or more running containers
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
top Display the running processes of a container
unpause Unpause all processes within one or more containers
update Update configuration of one or more containers
version Show the Docker version information
wait Block until one or more containers stop, then print their exit codes

➜ ~ docker -v
Docker version 18.06.1-ce, build e68fc7a

➜ ~ docker info


## docker COMMAND --help


查看某个命令的帮助文档:用途、参数



➜ ~ docker image --help

Usage: docker image COMMAND

Manage images

Commands:
build Build an image from a Dockerfile
history Show the history of an image
import Import the contents from a tarball to create a filesystem image
inspect Display detailed information on one or more images
load Load an image from a tar archive or STDIN
ls List images
prune Remove unused images
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rm Remove one or more images
save Save one or more images to a tar archive (streamed to STDOUT by default)
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE

Run ‘docker image COMMAND --help’ for more information on a command.



➜ ~ docker image build --help

Usage: docker image build [OPTIONS] PATH | URL | -

Build an image from a Dockerfile

Options:
–add-host list Add a custom host-to-IP mapping (host:ip)
–build-arg list Set build-time variables
–cache-from strings Images to consider as cache sources
–cgroup-parent string Optional parent cgroup for the container
–compress Compress the build context using gzip
–console Show console output (with buildkit only) (true, false, auto) (default auto)
–cpu-period int Limit the CPU CFS (Completely Fair Scheduler) period
–cpu-quota int Limit the CPU CFS (Completely Fair Scheduler) quota
-c, --cpu-shares int CPU shares (relative weight)
–cpuset-cpus string CPUs in which to allow execution (0-3, 0,1)
–cpuset-mems string MEMs in which to allow execution (0-3, 0,1)
–disable-content-trust Skip image verification (default true)
-f, --file string Name of the Dockerfile (Default is ‘PATH/Dockerfile’)
–force-rm Always remove intermediate containers
–iidfile string Write the image ID to the file
–isolation string Container isolation technology
–label list Set metadata for an image
-m, --memory bytes Memory limit
–memory-swap bytes Swap limit equal to memory plus swap: ‘-1’ to enable unlimited swap
–network string Set the networking mode for the RUN instructions during build (default “default”)
–no-cache Do not use cache when building the image
–platform string Set platform if server is multi-platform capable
–pull Always attempt to pull a newer version of the image
-q, --quiet Suppress the build output and print image ID on success
–rm Remove intermediate containers after a successful build (default true)
–security-opt strings Security options
–shm-size bytes Size of /dev/shm
–squash Squash newly built layers into a single new layer
–stream Stream attaches to server to negotiate build context
-t, --tag list Name and optionally a tag in the ‘name:tag’ format
–target string Set the target build stage to build.
–ulimit ulimit Ulimit options (default [])


## docker search


搜索镜像。



➜ ~ docker search openjdk
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
eclipse-temurin Official Images for OpenJDK binaries built b… 525 [OK]
openjdk Pre-release / non-production builds of OpenJ… 522 [OK]


[Docker Hub ( https://hub.docker.com/ )]( ) Docker官方仓库,用于搜索仓库中的镜像,以及查看镜像中的具体使用文档等,也可以将自己的镜像推送到官方仓库中。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/398755453b95405387c63f26054e0482.png)


## docker login


登录docker仓库。



➜ ~ docker login -u 用户名 -p 密码
Login Succeeded


## docker pull


docker pull <image\_name[:tag]> : 拉取某个镜像如果省略tag默认拉取latest。



➜ ~ docker pull openjdk:11
11: Pulling from library/openjdk
001c52e26ad5: Pull complete
d9d4b9b6e964: Pull complete
2068746827ec: Pull complete
9daef329d350: Pull complete
d85151f15b66: Pull complete
66223a710990: Pull complete
db38d58ec8ab: Pull complete
Digest: sha256:99bac5bf83633e3c7399aed725c8415e7b569b54e03e4599e580fc9cdb7c21ab
Status: Downloaded newer image for openjdk:11

拉取centos容器

docker pull centos


## docker images



查看本地所有镜像列表。

➜ ~ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
openjdk 11 47a932d998b7 19 months ago 654MB

查看指定镜像

➜ ~ docker images openjdk
REPOSITORY TAG IMAGE ID CREATED SIZE
openjdk 11 47a932d998b7 19 months ago 654MB


## docker rmi


删除镜像,-f : 表示强制force删除,默认只能删除未使用的,删除时可以使用容器名:标签,也可以使用容器的id。



➜ ~ docker rmi -f openjdk:11
➜ ~ docker rmi openjdk:11
Untagged: openjdk:11
Untagged: openjdk@sha256:99bac5bf83633e3c7399aed725c8415e7b569b54e03e4599e580fc9cdb7c21ab
Deleted: sha256:47a932d998b743b9b0bcce55aa8ede77de94a6a183c8a67dec9d5e3b8ce0faa7
Deleted: sha256:a99b7985263322d8e9da8c89f2f57b2e703cc2f8ad8ea87fb0ee402bb6162b78
Deleted: sha256:f751ef4f6907367707782910911112642b84b2d01ac8003d7c13fe8d76b5ae3d
Deleted: sha256:e7dd29f3ffa73e8d8d9ccb88f1507bb35fe14749d2f5a7c1a44b33ea62a13a1b
Deleted: sha256:1376fe23991c7bd9ac29c2469f6489e5e68b2311f78191e87c47acd67e846372
Deleted: sha256:935ab298b59cf4955c8a62f40960766ceedee432fde87f22a71d557be7e05d0a
Deleted: sha256:6fa094ba2e6e15e0fab64e7d1372945f05e70ed3bdf6fd90409153d7ec19d160
Deleted: sha256:9c742cd6c7a5752ee36be8ecb14be45c0885e10e6dd34f26a9ae3eb096c5d492


## docker save & docker load


docker save : 将本地镜像打成压缩包tar,docker load:将镜像压缩包加载进来。



-o:output

➜ ~ docker save -o openjdk11.tar openjdk:11
➜ ~ docker rmi openjdk:11
Untagged: openjdk:11
Untagged: openjdk@sha256:99bac5bf83633e3c7399aed725c8415e7b569b54e03e4599e580fc9cdb7c21ab
Deleted: sha256:47a932d998b743b9b0bcce55aa8ede77de94a6a183c8a67dec9d5e3b8ce0faa7
Deleted: sha256:a99b7985263322d8e9da8c89f2f57b2e703cc2f8ad8ea87fb0ee402bb6162b78
Deleted: sha256:f751ef4f6907367707782910911112642b84b2d01ac8003d7c13fe8d76b5ae3d
Deleted: sha256:e7dd29f3ffa73e8d8d9ccb88f1507bb35fe14749d2f5a7c1a44b33ea62a13a1b
Deleted: sha256:1376fe23991c7bd9ac29c2469f6489e5e68b2311f78191e87c47acd67e846372
Deleted: sha256:935ab298b59cf4955c8a62f40960766ceedee432fde87f22a71d557be7e05d0a
Deleted: sha256:6fa094ba2e6e15e0fab64e7d1372945f05e70ed3bdf6fd90409153d7ec19d160
Deleted: sha256:9c742cd6c7a5752ee36be8ecb14be45c0885e10e6dd34f26a9ae3eb096c5d492
➜ ~ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE

-i: input

➜ ~ docker load -i openjdk11.tar
9c742cd6c7a5: Loading layer [>] 129.2MB/129.2MB
03127cdb479b: Loading layer [
>] 11.3MB/11.3MB
293d5db30c9f: Loading layer [>] 19.31MB/19.31MB
9b55156abf26: Loading layer [
>] 156.5MB/156.5MB
b626401ef603: Loading layer [>] 11.74MB/11.74MB
826c3ddbb29c: Loading layer [
>] 3.584kB/3.584kB
7b7f3078e1db: Loading layer [==================================================>] 337.8MB/337.8MB
Loaded image: openjdk:11

➜ ~ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
openjdk 11 47a932d998b7 19 months ago 654MB


## docker volume


volume 数据卷,用于宿主机目录和容器中的目录的双向绑定互相映射用的。映射后,可以直接在宿主机上修改容器上的文件,同样在容器中修改文件也会同步修改宿主机上。


数据卷挂载的好处:


1. 修改查看方便,不需要再登录到容器内部查看,只需要在宿主机上查看即可。
2. 像配置文件(如conf.d)、数据文件(如mysql的data目录) 是需要持久化的,防止容器出现问题时重要数据丢失。



创建数据卷,默认挂载在/var/lib/docker/volumes/目录下

docker volumn create <数据卷名>

查看所有数据卷名

docker volumn ls

查看数据卷详情

docker volumn inspect <数据卷名>

删除指定的数据卷

docker volumn rm <数据卷名>

删除所有未使用的数据卷

docker volumn prune



➜ ~ docker volume create html
html
➜ ~ docker volume ls
DRIVER VOLUME NAME
local html
➜ ~ docker volume inspect html
[
{
“CreatedAt”: “2024-03-23T14:27:17Z”,
“Driver”: “local”,
“Labels”: {},
“Mountpoint”: “/var/lib/docker/volumes/html/_data”,
“Name”: “html”,
“Options”: {},
“Scope”: “local”
}
]
➜ ~ docker volume rm html
html

➜ ~ docker volume prune
WARNING! This will remove all local volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B


## docker run


docker run :如果镜像不存在先下载镜像并运行镜像,注意:每次运行都会创建一个新的容器。



-i: 创建一个交互式容器

-t: --tty tty终端(分配一个终端来操作容器)

-d: --detach 后台运行

–name: 容器名称(唯一)

-p: port 端口映射 宿主机端口:容器端口

-v:volume, 数据卷目录映射双向绑定,可以使用数据卷名映射容器目录,也可以直接使用将宿主机目录映射到容器目录(宿主机目录必须以/或者./开头)

-e:environment 环境参数,镜像内部需要使用到的参数

如果省略tag默认为latest,如果拉取的镜像是指定版本的,这里要显式指定版本号

创建交互式容器

docker run -itd
–name
-p 宿主机端口:容器端口
-e 环境变量名=值
-v 宿主机目录:容器目录
<image name[:tag]>



关于mysql的所有配置都可以在Docker Hub上查到

➜ ~ docker run -d
–name mysql
-p 3307:3306
-e TZ=Asia/Shanghai
-e MYSQL_ROOT_PASSWORD=123456
-v /Users/mengday/Softwares/Linux/volumes/mysql/data:/var/lib/mysql
-v /Users/mengday/Softwares/Linux/volumes/mysql/conf:/etc/mysql/conf.d
mysql:5.7.34
Unable to find image ‘mysql:5.7.34’ locally
5.7.34: Pulling from library/mysql
b4d181a07f80: Pull complete
a462b60610f5: Pull complete
578fafb77ab8: Pull complete
524046006037: Pull complete
d0cbe54c8855: Pull complete
aa18e05cc46d: Pull complete
32ca814c833f: Pull complete
52645b4af634: Pull complete
bca6a5b14385: Pull complete
309f36297c75: Pull complete
7d75cacde0f8: Pull complete
Digest: sha256:1a2f9cd257e75cc80e9118b303d1648366bc2049101449bf2c8d82b022ea86b7
Status: Downloaded newer image for mysql:5.7.34
df4a9dbf3661ee5b14fda3fe3e754d276f1bc2c5b81c68c9d998b74e10c076ff


## docker inspect


查看容器的所有配置详情:如数据卷挂载、端口映射、环境变量、IP地址 等。



➜ ~ docker inspect mysql
[
{
“Id”: “4013c283ea9cf2d01f8b51e501296295813cd37646283597adfb0635a0558d27”,
“HostConfig”: {
“Binds”: [
“/Users/mengday/Softwares/Linux/volumes/mysql/data:/var/lib/mysql”,
“/Users/mengday/Softwares/Linux/volumes/mysql/conf:/etc/mysql/conf.d”
]
},

    "Mounts": [
        {
            "Type": "bind",
            "Source": "/Users/mengday/Softwares/Linux/volumes/mysql/data",
            "Destination": "/var/lib/mysql"
        },
        {
            "Type": "bind",
            "Source": "/Users/mengday/Softwares/Linux/volumes/mysql/conf",
            "Destination": "/etc/mysql/conf.d" 
        }
    ],
    "Config": {
        "Hostname": "4013c283ea9c",
       
        "Env": [
            "TZ=Asia/Shanghai",
            "MYSQL\_ROOT\_PASSWORD=123456",
            "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
            "GOSU\_VERSION=1.12",
            "MYSQL\_MAJOR=5.7",
            "MYSQL\_VERSION=5.7.34-1debian10"
        ],
        "Cmd": [
            "mysqld"
        ],
        "Image": "mysql:5.7.34",
        "Entrypoint": [
            "docker-entrypoint.sh"
        ]
    },
    "NetworkSettings": {
        "Ports": {
            "3306/tcp": [
                {
                    "HostIp": "0.0.0.0",
                    "HostPort": "3307"
                }
            ]
        },
        
        "Gateway": "172.17.0.1",
        "IPAddress": "172.17.0.2"
    }
}

]

查看容器的ip地址属性,docker的ip为172.17.0.1,其它容器的依次是172.17.0.2递增

docker inspect -f=‘{{.NetworkSettings.IPAddress}}’ container_name/container_id


## docker network


查看Docker的IP。



yum install net-tools -y
ifconfig


![在这里插入图片描述](https://img-blog.csdnimg.cn/2021061409475319.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3ZiaXJkYmVzdA==,size_16,color_FFFFFF,t_70)


Docker在安装的是会创建一个`docker0`网卡,每个容器都有自己的IP地址,默认情况下所有容器都是以bridge的方式连接到Docker的一个虚拟网桥上 172.17.0.1/16, /16表示IP前两段是固定的,只有后两段式可以变的,在同一个网段的容器之间时可以互相访问的,但是容器的IP地址会变的,通过容器的IP地址访问不可靠,可以通过自定义网络,自定义网络可以通过容器名来互相访问。



网络列表,默认的是桥接方式bridge可以和宿主机和外网通信

docker network ls

查看使用bridge的容器

docker network inspect bridge

创建一个网络

docker network create <网络名>

删除某个自定义网络

docker network rm <网络名>

删除所有未使用的网络

docker network prune



➜ ~ docker network ls
NETWORK ID NAME DRIVER SCOPE
f18b70eee01c bridge bridge local
bcb18ec1867c host host local
75d5d48759de none null local
➜ ~
➜ ~ docker network inspect bridge
[
{
“Name”: “bridge”,
“Id”: “f18b70eee01cbc5d52dd1d29d082c566b78b8da4292db3f89fe348a02891680c”,
“Created”: “2024-03-23T04:32:41.393581303Z”,
“Scope”: “local”,
“Driver”: “bridge”,
“EnableIPv6”: false,
“IPAM”: {
“Driver”: “default”,
“Options”: null,
“Config”: [
{
“Subnet”: “172.17.0.0/16”,
“Gateway”: “172.17.0.1”
}
]
},
“Internal”: false,
“Attachable”: false,
“Ingress”: false,
“ConfigFrom”: {
“Network”: “”
},
“ConfigOnly”: false,
“Containers”: {
“ab9f14e882ff74a2de99fa979fb09f20f31cc0808b700c894bc7c6a705380349”: {
“Name”: “mysql”,
“MacAddress”: “02:42:ac:11:00:02”,
“IPv4Address”: “172.17.0.2/16”,
“IPv6Address”: “”
}
},
“Options”: {
“com.docker.network.bridge.default_bridge”: “true”,
“com.docker.network.bridge.enable_icc”: “true”,
“com.docker.network.bridge.enable_ip_masquerade”: “true”,
“com.docker.network.bridge.host_binding_ipv4”: “0.0.0.0”,
“com.docker.network.bridge.name”: “docker0”,
“com.docker.network.driver.mtu”: “1500”
},
“Labels”: {}
},
“NetworkSettings”: {
“Bridge”: “”,

        "Gateway": "172.17.0.1",
        "IPAddress": "172.17.0.2",
        "MacAddress": "02:42:ac:11:00:02",
        "Networks": {
            "bridge": {
                "Gateway": "172.17.0.1",
                "IPAddress": "172.17.0.2",
                "MacAddress": "02:42:ac:11:00:02"
            }
        }
    }

]

➜ ~ docker network create mynet
4e710a555792fe1e70f176367051b8797e310a8c448bbcab31bbe3391b02863d


## docker top


查看容器的进程信息



docker top <container_name/container_id>
docker top <container_name/container_id> -eo pid,comm

➜ ~ docker top mysql
PID USER TIME COMMAND
78460 999 0:03 mysqld
➜ ~
➜ ~ docker top mysql -eo pid,comm
PID COMMAND
78460 mysqld


## docker ps


查看容器。



查看启动的容器

➜ ~ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2b11fc9977f1 mysql:5.7.34 “docker-entrypoint.s…” 9 minutes ago Up 9 minutes 33060/tcp, 0.0.0.0:3307->3306/tcp mysql

查看所有容器 -a=all

➜ ~ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2b11fc9977f1 mysql:5.7.34 “docker-entrypoint.s…” 9 minutes ago Up 9 minutes 33060/tcp, 0.0.0.0:3307->3306/tcp mysql

查看最后一次运行的容器

docker ps -l

查看容器的CONTAINER ID

docker ps -q

-f指定格式

docker ps --format “table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}”


## docker stop & docker attach &docker start & docker restart


停止容器。



➜ ~ docker stop mysql
mysql

后台启动一个容器后,使用该命令进入这个容器

docker attach container_name/container_id

启动容器

docker start container_name/container_id

重启容器

docker restart container_name/container_id


## docker rm


删除容器。



➜ ~ docker rm mysql
mysql

删除所有停止的容器

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 15
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值