帮助命令
docker version #查看docker版本信息
docker info #查看docker系统级信息
docker [命令] --help #查看命令说明
帮助文档地址:https://docs.docker.com/reference/
镜像命令
docker images查看本地主机所有镜像
[root@localhost /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 8 months ago 13.3kB
#解释
REPOSITORY 镜像仓库源
TAG 镜像标签
IMAGE ID 镜像id
CREATED 镜像创建时间
SIZE 镜像大小
#可选项
-a --all #列出所有镜像
-q --quiet #只显示镜像id
docker search 镜像搜索
[root@localhost /]# docker search mysql
mysql MySQL is a widely used, open-source relation… 9958 [OK]
mariadb MariaDB is a community-developed fork of MyS… 3642 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 725 [OK]
#可选项,通过收藏过滤
--filter=STARS=3000 #搜索出来镜像就是stars大于3000的
[root@localhost /]# docker search mysql --filter=STARS=3000
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 9958 [OK]
mariadb MariaDB is a community-developed fork of MyS… 3642 [OK]
docker pull 下载镜像
#指定版本下载
docker pull mysql:5.7
docker rmi删除镜像
docker rmi 镜像id #删除指定镜像
docker rmi 镜像id 镜像id 镜像id #删除多个镜像
docker rmi -f $(docker images -aq) #删除全部镜像
容器命令
说明:我们有了镜像才可以创建容器,linux下载一个centos来测试学习
docker pull centos
docker run 新建容器启动
docker run [可选参数] [镜像名]
#参数说明
--name=“Name” 容器名字 tomcat01 tomcat02,用来区分容器
-d
-it
-p
-p ip:主机端口:容器端口
-p 主机端口:容器端口(常用)
-p 容器端口
-p 随机指定端口
#测试,启动并进入容器
#docker run -it centos 的意思是,为centos这个镜像创建一个容器
#-it就等于 -i和-t,这两个参数的作用是,为该docker创建一个伪终端,这样就可以进入到容器的交互模式(也就是直接进入到容器里面)
#后面的/bin/bash的作用是表示载入容器后运行bash ,docker中必须要保持一个进程的运行,要不然整个容器启动后就会马上kill itself,这个/bin/bash就表示启动容器后启动bash
[root@localhost /]# docker run -it centos /bin/bash
[root@481cfb6a514b /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
#退出容器到主机
[root@481cfb6a514b /]# exit
exit
docker ps 列出所有运行的容器
#docker ps 命令 [可选参数]
#列出当前正在运行的容器
-a #累出当前运行的容器+历史运行过的容器
-n=? #显示最近创建容器
-q #只显示容器编号
[root@localhost /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b15b3c7d483d centos "/bin/bash" 5 minutes ago Exited (0) 8 seconds ago infallible_ardinghelli
481cfb6a514b centos "/bin/bash" 2 hours ago Exited (0) 5 minutes ago exciting_sammet
9e0de3487965 bf756fb1ae65 "/hello" 4 hours ago Exited (0) 4 hours ago suspicious_robinson
exit 退出容器
exit #直接退出容器
Ctrl + p + Q #容器不停止退出
删除容器
docker rm 容器id #删除指定容器,不能删除正在执行的容器,如果强制删除rm -f
docker rm -f $(docker images -aq) #强制删除所有容器
docker ps -a -q|xargs docker rm #强制删除所有容器
启动和停止容器
docker start 容器id #开启容器
docker restart 容器id #重启容器
docker stop 容器id #停止容器
docker kill 容器id #强制停止容器
常用其他命令
后台启动容器
#命令docker run -d [镜像名]
docker run -d centos
#问题docker ps 后发现开启的centos容器停止了
#常见的坑:docker容器使用后台运行,就有必要有一个前台进程,docker发现没有应用,就自动停止了(容器没有对外提供服务)
查看容器内部进程信息
#docker top 容器id
[root@localhost /]# docker top 74b98e2b58ce
UID PID PPID C STIME TTY TIME CMD
root 11505 11489 0 21:55 ? 00:00:00 /bin/bash
查看镜像原数据
#docker inspect 容器id
[root@localhost /]# docker inspect 74b98e2b58ce
[
{
"Id": "74b98e2b58ce17668d107537678bfb27b46f0b560febe12c09441f04b0ad0379",
"Created": "2020-09-13T13:55:55.133386006Z",
"Path": "/bin/bash",
"Args": [],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 11505,
"ExitCode": 0,
"Error": "",
"StartedAt": "2020-09-13T13:55:57.25370239Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:0d120b6ccaa8c5e149176798b3501d4dd1885f961922497cd0abef155c869566",
"ResolvConfPath": "/var/lib/docker/containers/74b98e2b58ce17668d107537678bfb27b46f0b560febe12c09441f04b0ad0379/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/74b98e2b58ce17668d107537678bfb27b46f0b560febe12c09441f04b0ad0379/hostname",
"HostsPath": "/var/lib/docker/containers/74b98e2b58ce17668d107537678bfb27b46f0b560febe12c09441f04b0ad0379/hosts",
"LogPath": "/var/lib/docker/containers/74b98e2b58ce17668d107537678bfb27b46f0b560febe12c09441f04b0ad0379/74b98e2b58ce17668d107537678bfb27b46f0b560febe12c09441f04b0ad0379-json.log",
"Name": "/funny_keldysh",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "",
"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,
"Capabilities": null,
"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/632450a6583ca3e93ecd9cf689ac3f56983c77e111c668ee7ea1befcf62f4410-init/diff:/var/lib/docker/overlay2/295a3faa7fd7ddbf81b948e17667f4bb8be8e805176e2e075969d6f30a84f426/diff",
"MergedDir": "/var/lib/docker/overlay2/632450a6583ca3e93ecd9cf689ac3f56983c77e111c668ee7ea1befcf62f4410/merged",
"UpperDir": "/var/lib/docker/overlay2/632450a6583ca3e93ecd9cf689ac3f56983c77e111c668ee7ea1befcf62f4410/diff",
"WorkDir": "/var/lib/docker/overlay2/632450a6583ca3e93ecd9cf689ac3f56983c77e111c668ee7ea1befcf62f4410/work"
},
"Name": "overlay2"
},
"Mounts": [],
"Config": {
"Hostname": "74b98e2b58ce",
"Domainname": "",
"User": "",
"AttachStdin": true,
"AttachStdout": true,
"AttachStderr": true,
"Tty": true,
"OpenStdin": true,
"StdinOnce": true,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"/bin/bash"
],
"Image": "centos",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"org.label-schema.build-date": "20200809",
"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": "b7dea3086c89e9a055d11c4e5dc055d89d95b0cf8fdb37ff385c4ead0f7b92ff",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {},
"SandboxKey": "/var/run/docker/netns/b7dea3086c89",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "31a5179e24c36615c74ead28c1adbe229a6f290cfdff6d35444e2d96fa943c2e",
"Gateway": "172.17.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:02",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "08f35ada5fbb99d55506e2866abec35d63c788eb2485f9f0b6a3f569af255d08",
"EndpointID": "31a5179e24c36615c74ead28c1adbe229a6f290cfdff6d35444e2d96fa943c2e",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null
}
}
}
}
]
进入当前正在运行的容器
#我们容器通常是后台运行的,需要进入容器,修改一些配置
#命令
docker exec -it 容器id /bin/bash
#测试
[root@localhost /]# docker exec -it 74b98e2b58ce /bin/bash
[root@74b98e2b58ce /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@74b98e2b58ce /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 13:55 pts/0 00:00:00 /bin/bash
root 15 0 0 14:05 pts/1 00:00:00 /bin/bash
root 29 15 0 14:05 pts/1 00:00:00 ps -ef
#方式二
docker attach 容器id
################### docker exec与docker attach区别
#docker exec #进入容器后开启一个新的终端,可以在里面操作(常用)
#docker attach #进入容器正在执行的终端,不会启动新的进程
从容器内拷贝到主机
#docker cp 容器id:容器文件路径 主机目录路径
[root@74b98e2b58ce home]# touch test.java
[root@74b98e2b58ce home]# ls
test.java
[root@74b98e2b58ce home]# exit
exit
[root@localhost /]# cd home
[root@localhost home]# ls
redis-6.0.6.tar.gz wise
[root@localhost home]# docker cp 74b98e2b58ce:/home/test.java /home
[root@localhost home]# ls
redis-6.0.6.tar.gz test.java wise
小结
$ docker --help
attach 将标准输入和标准输出连接到正在运行的容器
build 使用dockerfile文件创建镜像
commit 从容器的修改项中创建新的镜像
cp 将容器的目录或文件复制到本地文件系统中
create 创建一个新的镜像
diff 检查容器文件系统的修改
events 实时输出docker服务器中发生的事件
exec 从外部运行容器内部的命令
export 将容器的文件系统到处为tat文件包
history 显示镜像的历史
images 输出镜像列表
import 从压缩为tar文件的文件系统中创建镜像
info 显示当前系统信息、docker容器与镜像个数、设置信息等
inspect 使用JSON格式显示容器与镜像的详细信息
kill 向容器发送kill信号关闭容器
load 从tar文件或标准输入中加载镜像
login 登录docker注册服务器
logout 退出docker注册服务器
logs 输出容器日志信息
pause 暂停容器中正在运行的所有进程
port 查看容器的端口是否处于开放状态
ps 输出容器列表
pull 从注册服务器中拉取一个镜像或仓库
push 将镜像推送到docker注册服务器
rename 重命名一个容器
restart 重启一个或多个容器
rm 删除一个或多个容器,若没有指定标签则删除lastest标签。
rmi 删除一个或多个镜像,若没有指定标签则删除lastest标签。
run 在一个新容器中中运行命令,用于指定镜像创建容器。
save 将一个或多个镜像保存为tar包
search 从Docker Hub中搜索镜像
start 启动一个或多个已经停止的容器
stats Display a live stream of container(s) resource usage statistics
stop 停止一个或多个正在运行的容器
tag 设置镜像标签
top 显示容器中正在运行的进程信息
unpause 重启pause命令暂停的容器
update 更新一个或多个容器的配置
version 显示docker版本信息
wait 等待容器终止然后输出退出码
练习
安装nginx
# 1.命令行搜索nginx 推荐在dockerhub搜索https://hub.docker.com/ 可看到详细信息
docker search nginx
# 2.拉取nginx镜像到本地主机
docker pull nginx
#启动镜像 docker run -d --name [容器名称] -p [宿主机端口]:[容器内部端口] -d后台运行
docker run -d --name nginx01 -p 3344:80
#查看启动的镜像
docker images
#在宿主机上访问nginx服务 也可以在外网测试访问http://192.168.91.130:3344/
curl localhost:3344
#进入nginx01容器
[root@localhost ~]# docker exec -it nginx01 /bin/bash
root@294af4025b29:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@294af4025b29:/# cd /etc/nginx
root@294af4025b29:/etc/nginx# ls
conf.d fastcgi_params koi-utf koi-win mime.types modules nginx.conf scgi_params uwsgi_params win-utf
接口暴露概念
这样操作,我们每次需要修改nginx配置文件时,都需要进入容器内部。十分麻烦,我们要可以在容器外部提供映射路径,达到在容器修改文件名,容器内部就可以自动修改?-v数据卷!!
docker安装tomcat
#官方推荐使用
#这个命令一般用作测试,容器用完即删除tomcat镜像及容器(不建议使用)
docker run -it --rm tomcat:9.0
#下载启动
docker pull tomcat
#启动运行
docker run -d --name tomcat01 -p 3355:8080 tomcat
#测试访问
curl localhost:3355
#进入tomcat容器
docker exec -it tomcat /bin/bash
docker部署es+kibana
#es暴露端口很多
#es十分耗费内容
#es的数据一般需要放置到安全目录!挂载
#--net somenetwork ?网络配置
#启动es
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
#启动了 linux就很卡 docker stats 查看cpu状态
#测试访问es是否成功
curl localhost:9200
#关闭es,增加内存限制,修改配置文件 -e环境配置参数
docker run -d --name elasticsearch03 -p 9200:9200 -p 9300:9300 -e ES_JAVA_OPTS="-Xms256m -Xmx512m" elasticsearch:7.6.2
使用kibana连接es?网络如何能连接过去
可视化
portainer
docker run -d -p 8088:9000 \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
--privileged=true portainer/portainer
什么portainer?
Docker图形化界面管理工具!提供一个后台面板供我们操作!!
访问测试:
首次登陆需要注册用户,给admin
用户设置密码:
单机版这里选择local
即可,选择完毕,点击Connect
即可连接到本地docker
:
注意:该页面上有提示需要挂载本地 **/var/run/docker.socker**
与容器内的**/var/run/docker.socker**
连接。因此,在启动时必须指定该挂载文件。
首页:
容器列表:
点击容器列表中的容器名Name
,即可查看容器详情:
并且在容器详情页可以使用该容器创建镜像:
镜像列表(在镜像列表可以直接pull
一个镜像,可以从远程pull
,也可以从私有库中pull
。从私有库中pull
,需要将私有库的地址提前进行配置,这个在后面会说):
点击镜像ID
,即可查看镜像详情信息,在详情信息页面,除了镜像的一些信息外,还可以对该镜像进行打标签tag
操作,然后将镜像push
到远程仓库或者私有仓库中。
仓库管理页面(该界面可以查看配置的镜像仓库列表,同时可以添加仓库,添加成功之后,即可在image
镜像页面进行pull
、push
操作。):
添加镜像仓库: