docker命令
帮助命令
docker version # 显示版本信息
docker info #显示docker的系统信息,包括镜像和容器
docker 命令 --help #万能命令
镜像命令
docker images #查看镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 470671670cac 8 months ago 237MB
hello-world latest bf756fb1ae65 8 months ago 13.3kB
#注释
REPOSITORY #镜像库
TAG #镜像标签
IMAGE ID #镜像ID
CREATED #创建时间
SIZE #镜像大小
#可选项
-a #显示所有镜像
-q #只显示ID
docker search 镜像名 #搜索镜像
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 9977 [OK]
mariadb MariaDB is a community-developed fork of MyS… 3653 [OK]
#可选项
--filter #过滤信息
docker pull 镜像名 #下载镜像
Using default tag: latest #默认下载最新版
latest: Pulling from library/mysql
d121f8d1c412: Pull complete #分层下载
f3cebc0b4691: Pull complete
1862755a0b37: Pull complete
489b44f3dbb4: Pull complete
690874f836db: Pull complete
baa8be383ffb: Pull complete
55356608b4ac: Pull complete
dd35ceccb6eb: Pull complete
429b35712b19: Pull complete
162d8291095c: Pull complete
5e500ef7181b: Pull complete
af7528e958b6: Pull complete3
Digest: sha256:e1bfe11693ed2052cb3b4e5fa356c65381129e87e38551c6cd6ec532ebe0e808 #签名信息
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest #真实地址
#选择版本下载
docker pull 镜像名:版本号
如:docker pull mysql:5.7
docker rmi 删除命令
docker rmi -f 镜像ID #根据镜像的id进行删除
docker rmi -f 镜像ID 镜像ID 镜像ID #根据镜像的id进行删除,如果胡多个使用空格隔开
docker rmi -f 镜像名 #根据镜像的名字进行删除
docker rmi -f $(docker images -aq) #根据查询出来的镜像ID进行递归删除
容器命令
说明:有了镜像才可以创建容器,我们以下载centos为例
docker pull centos
新建容器并启动
docker run [可选参数] 镜像名
#参数说明
--name="name"
-d #后台方式运行
-it #使用交互方式运行,进行容器查看内容
-p
-p 主要端口:容器端口
-p ip:主机端口:容器端口
-p 容器端口
容器端口
-P #随机指定端口
##测试
运行并进入容器
docker run -it 0d120b6ccaa8 /bin/bash
# 外部运行容器内的命令
docker exec -it integer redis-cli
后台启动
docker run -d --name nginx01 -p 8080:80 nginx
退出容器
exit #容器停止并退出
ctrl + p + q #容器不停止退出
列出所有正在运行的容器
docker ps #列出正在运行的容器
可选参数
-a #列出所有正在运行的容器,包括历史记录
-n=? #显示最近创建的容器
-q #只显示容器编号
-aq #显示所有容器编号
删除容器
docker rm 容器ID #根据容器id删除容器,不能删除正在运行的容器
docker rm -f 容器ID #强制删除正在运行的容器
docker rm -f $(docker ps -aq) #删除所有的容器
容器的启动和停止
docker start 容器ID #启动容器
docker restart 容器ID #重启容器
docker stop 容器ID #停止容器
docker kill 容器ID #强制停止容器,杀掉这个进程
常用的其它命令
后台启动容器
docker run -d 镜像名
#问题docker ps 查看所有运行的容器的时候发现停止了。
#原因。是因为后台启动之后没有添加任何服务所以就停止了,也就是没有提供任何前台进程。
查看日志
docker logs -tf 容器ID #显示日志
docker logs -tf --tail number 容器ID #显示指定的日志数量,number是表示数量。如显示10条: docker logs -tf --tail 10 centos
查看容器中的进程信息
docker top 容器ID #查看容器ID
查看镜像元数据
docker inspect 容器ID #查看元数据
进入当前正在运行的容器
docker exec -it 容器ID /bin/bash #进入容器,进入容器后打开一个新的终端。
docker attach 容器ID #进入容器,进入正在执行的终端,不会启动新进程。
从容器中拷贝文件到主机上
docker cp 容器ID:/path /path #从容器内质数据到主机上。
例子
docker cp 0d120b6ccaa8:/home/main.go /home #从容器的home目录拷贝main.go这个文件到主要的home目录当中
查看cpu状态
命令
docker stats
运行结果
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
908e6357cbdc nginx01 0.00% 1.418MiB / 1.795GiB 0.08% 4.24kB / 6.56kB 0B / 4.1kB 2
CONTAINER ID #容器ID
NAME #容器名字
MEM USAGE #使用的内存
LIMIT #本机内存
MEM #使用的百分比
启动多个端口号
#多端口启动
docker run -d --name es01 -p 9200:9200 -p 9300:9300 elasticsearch
#限制内存启动,更多设置请看docker官方文档的elasticSearch配置。网址:https://hub.docker.com/_/elasticsearch
dokcer run -d --name es02 -p 9200:9200 -p 9300:9300 -e ES_JAVA-OPTS "-Xms125m -Xmx512m"
提交一个自己的镜像
命令
docker commit -m="信息" -a="作者" 容器ID 目标镜像名:[tag]
例子
docker commit -m="新添测试文件" -a="WFY" 0d120b6ccaa8 myNginx:1.0.1
容器数据卷
使用数据卷
方式一:
docker run -v 主机目录:容器内目录
例子:
docker run -d --name nginx02 -p 8080:80 -v /home/nginx:/home nginx
匿名挂载和具名挂载
docker run -d --name -p -v 挂载名:容器绝对路径 镜像名 #具名挂载。*注:挂载名可以任意取
docker run -d --name -p -v 容器绝对路径 镜像名 #匿名挂载
举例:
docker run -d --name nginx02 -p 6379:6379 -v concreteness_name:/etc/nginx/ nginx #具名挂载
docker run -d --name nginx02 -p 6379:6379 -v /etc/nginx/ nginx #匿名挂载
docker run 挂载名:容器绝对路径:ro 镜像名 #具名挂载。设置只读,只有宿主机可以写
docker run 容器绝对路径:rw 镜像名 #匿名挂载。设置可读可写
docker volume ls #查看卷情况
docker volume inspect 卷名 #查看卷挂载的具体信息,如路径。
docker run --name 容器名02 volumes-from 容器名01 镜像名 #共用相同的地址空间
例子:
docker run -d -it --name centos02 volumes-from centos01 centos
方式二:请看DockerFile
DockerFile
注意:所有的指令都必须大写,指令都必须大写,指令都必须大写!重要事情说三遍
常用指令
FROM #基础镜像,所有的基础从这里开始构建。
MAINTAINER #镜像是谁写的,是由谁负责的。留姓名和邮箱
RUN #镜像构建的时候运行的指令
ADD #运行的步骤,添加内容,如nginx压缩包
WORKDIR #指定工作目录
VOLUME #挂载的目录
EXPOSE #对外暴露的端口
CMD #指定容器启动的时候要运行的命令,只有最后一个会生效,可以被替代。
ENTRYPOINT #指定容器启动的时候要运行的命令,可以追加命令
ONBUILD #当构建一个被继承DockerFile这个时候运行ONBUILD的指令,是一个触发指令
COPY #类似于ADD,将我们的文件拷贝到镜像中
ENV #构建的时候设置环境变量
镜像
docker build -f 文件的路径(相对路径) -t 镜像名:[tag] . #构建一个镜像
#镜像制作例子,请使用vim输入如下内容,并保存,名字任意。我这边命为docker_mycentos,不用写后缀名,不用写后缀名,不用写后缀名。
FROM centos
MAINTAINER wfy<1279632200@qq.com>
ENV MYPATH /home
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD /bin/bash
#运行
docker build -f dockerFilePath -t mycentos:1.0 .
docker history 镜像名 #查看一个镜像是如何构建的
#例子
docker history mycentos:1.0
docker网络
查看IP地址
#命令
ip addr #查看IP地址
#结果
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo #127.0.0.1/8本机回环地址
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:16:3e:12:49:6e brd ff:ff:ff:ff:ff:ff
inet 172.19.168.5/20 brd 172.19.175.255 scope global dynamic eth0 #172.19.168.5/20阿里去内网地址
valid_lft 295582304sec preferred_lft 295582304sec
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:79:e2:ff:ba brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 #172.17.0.1/16 docker0地址
valid_lft forever preferred_lft forever
查看docker网络IP地址
docker exec -it 669f29dcdbf7 ip addr #查看容器IP
自定义网络(容器互联)
网络模式
bridge:桥接 docker(默认)
none:不使用网络
host:与宿主机共享网络
container:容器网络连通(使用少)
查看所有的docker网络
docker network ls #查看所有的docker网络
创建网络
#创建一个子网是192.168.0.0/16 网关为192.168.0.1的桥接网络。默认为桥接网络可不写--driver bridge
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
#结果:
[root@iZuf641lw91pvk8p7qobq2Z ~]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
51055b5b7cb15a9935ab8b595469ab4b172f8d24be7902a30841f9b22f099d0c
[root@iZuf641lw91pvk8p7qobq2Z ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
0f3e8454cfde bridge bridge local
469712d567e7 host host local
`51055b5b7cb1 mynet bridge local`
782eda3f838a none null local
#查看网络详细信息
[root@iZuf641lw91pvk8p7qobq2Z ~]# docker network inspect mynet
[
{
"Name": "mynet",
"Id": "51055b5b7cb15a9935ab8b595469ab4b172f8d24be7902a30841f9b22f099d0c",
"Created": "2020-09-27T12:06:33.517949952+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "192.168.0.0/16",
"Gateway": "192.168.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
使用创建好的网络
docker run --net 网络名 镜像名 #启动一个镜像使用我们自己创建的网络
例子:
docker run -d -P --name nginx01 --net mynet nginx
使用优点:做到网络之间的相互隔离。如mysql集群单独建立一个网络,redis单独建立一个网络等。
网络互通
docker network connect 网络名 容器名
例子:
docker network connect mynet nginx01
想要详细了解docker可以观看狂神说docker的视频,地址:狂神说docker
知识来自积累,不断学习才能进步!