docker 常用命令

212 阅读7分钟

docker version 显示docker的版本信息

docker info 显示docker的系统信息

docker 命令 --help

docker images 查看所有镜像

拉一个镜像centos来测试学习

docker pull centos

新建容器并启动

docker run [可选参数] image

--name ="name" 容器名字

-d 后台运行方式

-it 使用交互方式运行,进入容器查看内容

-p 指定容器的端口 -p 8080:8080

-p 主机端口:容器端口(常用)

-p 容器端口

-P 随机指定端口

docker run -it centos /bin/bash 进入centos容器并运行

ls 查看容器内的centos

exit 离开容器并退出

ctrl+P+Q 容器不停止退出

docker ps

空 查看正在运行的容器

-a 查看曾经运行过的所有容器

-n 显示最近创建的容器

-q 只显示容器的编号

删除容器:

docker rm 容器id 删除指定的容器,不能删除正在运行的容器 强制删除用 rm -f

docker rm -f $(docker ps -aq) 删除所有的容器

启动和停止容器的操作

docker start 容器id 启动容器

docker restart 容器id 重启容器

docker stop 容器id 停止当前正在运行的容器

docker kill 容器id 强制停止当前容器

常用的其他命令

docker run -d 镜像名 后台启动容器

问题docker ps ,发现centos 停止了

常见的坑,docker 容器使用后台运行,就必须要有一个前台进程,docker 发现没有应用,就会自动停止

nginx 容器启动后,发现自己没有提供业务,就会立即停止,就是没有进程了

查看日志

docker logs --help 查看日志命令

docker log -f -t --tail a763ba5cd6d6(容器🆔id)

自己编写一段shell脚本

docker run -d centos /bin/sh -c "while true;do echo wangdan;sleep 1;done"

docker ps

显示日志

--tf 显示日志

--tail number 要显示日志条数

docker logs -tf --tail 10 f45c89c5c8fc

查看容器的进程命令

docker top f45c89c5c8fc(容器🆔id)

查看容器所有信息

docker inspect 容器🆔id

[

{

"Id": "f45c89c5c8fc2f679fff872b8184382135744754393876121ade8678db106ca2",

"Created": "2021-12-03T03:46:20.95865763Z",

"Path": "/bin/sh",

"Args": [

"-c",

"while true;do echo wangdan;sleep 1;done"

],

"State": {

"Status": "running",

"Running": true,

"Paused": false,

"Restarting": false,

"OOMKilled": false,

"Dead": false,

"Pid": 2112311,

"ExitCode": 0,

"Error": "",

"StartedAt": "2021-12-03T03:46:23.638493858Z",

"FinishedAt": "0001-01-01T00:00:00Z"

},

"Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",

"ResolvConfPath": "/var/lib/docker/containers/f45c89c5c8fc2f679fff872b8184382135744754393876121ade8678db106ca2/resolv.conf",

"HostnamePath": "/var/lib/docker/containers/f45c89c5c8fc2f679fff872b8184382135744754393876121ade8678db106ca2/hostname",

"HostsPath": "/var/lib/docker/containers/f45c89c5c8fc2f679fff872b8184382135744754393876121ade8678db106ca2/hosts",

"LogPath": "/var/lib/docker/containers/f45c89c5c8fc2f679fff872b8184382135744754393876121ade8678db106ca2/f45c89c5c8fc2f679fff872b8184382135744754393876121ade8678db106ca2-json.log",

"Name": "/silly_yalow",

"RestartCount": 0,

"Driver": "overlay2",

"Platform": "linux",

"MountLabel": "",

"ProcessLabel": "",

"AppArmorProfile": "docker-default",

"ExecIDs": null,

"HostConfig": {

"Binds": null,

"ContainerIDFile": "",

"LogConfig": {

"Type": "json-file",

"Config": {}

},

"NetworkMode": "default",

"PortBindings": {},

"RestartPolicy": {

"Name": "no",

"MaximumRetryCount": 0

},

"AutoRemove": false,

"VolumeDriver": "",

"VolumesFrom": null,

"CapAdd": null,

"CapDrop": null,

"CgroupnsMode": "host",

"Dns": [],

"DnsOptions": [],

"DnsSearch": [],

"ExtraHosts": null,

"GroupAdd": null,

"IpcMode": "private",

"Cgroup": "",

"Links": null,

"OomScoreAdj": 0,

"PidMode": "",

"Privileged": false,

"PublishAllPorts": false,

"ReadonlyRootfs": false,

"SecurityOpt": null,

"UTSMode": "",

"UsernsMode": "",

"ShmSize": 67108864,

"Runtime": "runc",

"ConsoleSize": [

0,

0

],

"Isolation": "",

"CpuShares": 0,

"Memory": 0,

"NanoCpus": 0,

"CgroupParent": "",

"BlkioWeight": 0,

"BlkioWeightDevice": [],

"BlkioDeviceReadBps": null,

"BlkioDeviceWriteBps": null,

"BlkioDeviceReadIOps": null,

"BlkioDeviceWriteIOps": null,

"CpuPeriod": 0,

"CpuQuota": 0,

"CpuRealtimePeriod": 0,

"CpuRealtimeRuntime": 0,

"CpusetCpus": "",

"CpusetMems": "",

"Devices": [],

"DeviceCgroupRules": null,

"DeviceRequests": null,

"KernelMemory": 0,

"KernelMemoryTCP": 0,

"MemoryReservation": 0,

"MemorySwap": 0,

"MemorySwappiness": null,

"OomKillDisable": false,

"PidsLimit": null,

"Ulimits": null,

"CpuCount": 0,

"CpuPercent": 0,

"IOMaximumIOps": 0,

"IOMaximumBandwidth": 0,

"MaskedPaths": [

"/proc/asound",

"/proc/acpi",

"/proc/kcore",

"/proc/keys",

"/proc/latency_stats",

"/proc/timer_list",

"/proc/timer_stats",

"/proc/sched_debug",

"/proc/scsi",

"/sys/firmware"

],

"ReadonlyPaths": [

"/proc/bus",

"/proc/fs",

"/proc/irq",

"/proc/sys",

"/proc/sysrq-trigger"

]

},

"GraphDriver": {

"Data": {

"LowerDir": "/var/lib/docker/overlay2/e399fd6d96c5d41d0fadf93cca24ed075b0385af21f57a97c665ef6065e33e5b-init/diff:/var/lib/docker/overlay2/9424e33e99aecad4f34ee34a472baea9fe1141785c26b9b1d1a5fb346b8b99b6/diff",

"MergedDir": "/var/lib/docker/overlay2/e399fd6d96c5d41d0fadf93cca24ed075b0385af21f57a97c665ef6065e33e5b/merged",

"UpperDir": "/var/lib/docker/overlay2/e399fd6d96c5d41d0fadf93cca24ed075b0385af21f57a97c665ef6065e33e5b/diff",

"WorkDir": "/var/lib/docker/overlay2/e399fd6d96c5d41d0fadf93cca24ed075b0385af21f57a97c665ef6065e33e5b/work"

},

"Name": "overlay2"

},

"Mounts": [],

"Config": {

"Hostname": "f45c89c5c8fc",

"Domainname": "",

"User": "",

"AttachStdin": false,

"AttachStdout": false,

"AttachStderr": false,

"Tty": false,

"OpenStdin": false,

"StdinOnce": false,

"Env": [

"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

],

"Cmd": [

"/bin/sh",

"-c",

"while true;do echo wangdan;sleep 1;done"

],

"Image": "centos",

"Volumes": null,

"WorkingDir": "",

"Entrypoint": null,

"OnBuild": null,

"Labels": {

"org.label-schema.build-date": "20210915",

"org.label-schema.license": "GPLv2",

"org.label-schema.name": "CentOS Base Image",

"org.label-schema.schema-version": "1.0",

"org.label-schema.vendor": "CentOS"

}

},

"NetworkSettings": {

"Bridge": "",

"SandboxID": "6116ae4390c9d1c9b478744462a83bade8f9eb3b028085827d7c80c739332755",

"HairpinMode": false,

"LinkLocalIPv6Address": "",

"LinkLocalIPv6PrefixLen": 0,

"Ports": {},

"SandboxKey": "/var/run/docker/netns/6116ae4390c9",

"SecondaryIPAddresses": null,

"SecondaryIPv6Addresses": null,

"EndpointID": "959898d7dbf834e597a70912956730ea283191fb46053d3e02ace080b8daa1fb",

"Gateway": "172.17.0.1",

"GlobalIPv6Address": "",

"GlobalIPv6PrefixLen": 0,

"IPAddress": "172.17.0.3",

"IPPrefixLen": 16,

"IPv6Gateway": "",

"MacAddress": "02:42:ac:11:00:03",

"Networks": {

"bridge": {

"IPAMConfig": null,

"Links": null,

"Aliases": null,

"NetworkID": "067114a8c117f65a3d1fedd4dbae4aedee1c40ff0393a904b0d54f41b95d5b9c",

"EndpointID": "959898d7dbf834e597a70912956730ea283191fb46053d3e02ace080b8daa1fb",

"Gateway": "172.17.0.1",

"IPAddress": "172.17.0.3",

"IPPrefixLen": 16,

"IPv6Gateway": "",

"GlobalIPv6Address": "",

"GlobalIPv6PrefixLen": 0,

"MacAddress": "02:42:ac:11:00:03",

"DriverOpts": null

}

}

}

}

]

进入当前正在运行的容器:

我们通常都是使用后台方式运行的,需要进入容器,修改一些配置

命令

方式一:docker exec -it 容🆔id bashShell (docker exec -it f45c89c5c8fc /bin/bash) 进入容器后开启一个新的终端

方式二:docker attach 容器🆔id 进入容器正在执行的终端,不会启动新的进程

正在执行当前代码。。。

从容器内拷贝文件到主机上

docker cp 容器id:容器内路径 目的主机路径

拷贝是一个手动过程,未来我们使用 -V 卷的技术,可以实现,自动同步 /home

练习

练习一:在本机部署一个nginx

第一步 :docker pull nginx

第二步: docker run -d --name nginx01 -p 3344:80 nginx(暴露端口80给外部)

第三步:docker exec -it nginx01 /bin/bash (执行nginx01这个容器)

练习二:在本级部署一个tomact

官方使用:docker run -it --rm tomact:9.0 一般用来测试,用完就删除

第一步 :docker pull tomcat

第二步:docker run -d -p 3355:8080 --name tomcat01 tomcat

练习三:部署es+kibana(这里涉及到一个内存优化),es体积太大了!

doker stats 查看docker内存

docker run -d --name elasticsearch02 -p 9200:9200 -p 9300:9300 -e "discovery.type = single-node" -e

ES_JAVA_OPTS = "Xms64m -Xms512m" elasticsearch:7.6.2

镜像是什么?

Docker镜像加载原理

联合文件系统(分层,并且有公用的就不用再pull)

如何提交一个自己的镜像?(提交到本机)

commit镜像

docker commit 提交容器成为一个新的副本

命令和git原理类似

docker commit -m="提交的描述信息“ -a="作者” 容器id 目标镜像名:版本号

容器数据卷

容器的持久化和同步操作!容器间也是可以数据共享的

使用数据卷:

方式一:直接使用命令来挂载 -v

docker run -it -v 主机目录:容器内目录

docker run -it -v /home/ceshi:/home centos /bin/bash

启动起来后我们可以通过 docker inspect 容器id 去monuts这个里面查看对应关系

DockerFile

Docker网络