Docker常用指令大全及其详解整理
原创文章!一点一点慢慢整理了两个多小时!
设置开机启动:systemctl enable docker
启动docker:systemctl start docker
查看版本:docker version
查看详细信息:docker info
镜像操作
查看本地镜像:docker images
搜索镜像:docker search [name] #name为你想拉取镜像的名字,如nginx,centos
搜索镜像并过滤是官方的: docker search --filter “is-official=true” [name]
搜索镜像并过滤大于多少颗星星的:docker search --filter stars=10 [name]
下载centos7镜像:docker pull centos:7 #不指定版本:7则为默认最新版本:latest
修改本地镜像名字(小写):docker tag [本地镜像名称] [想改的名称]
本地镜像的删除:docker rmi centos:7
阿里云镜像加速
配置步骤:vi /etc/docker/daemon.json
添加
{
"registry-mirrors": ["https://5xok66d4.mirror.aliyuncs.com"]
}
!!!注意,每个人的https://5xok66d4.mirror.aliyuncs.com不一样,进入https://cr.console.aliyun.com/cn-shenzhen/instances/mirrors **查看
重启:systemctl daemon-reload && systemctl restart docker
容器操作
构建容器:docker run -itd --name=mycentos centos:7 #注意版本号的指定
-i :表示以交互模式运行容器(让容器的标准输入保持打开)
-d:表示后台运行容器,并返回容器ID
-t:为容器重新分配一个伪输入终端
–name:为容器指定名称
-p:端口映射 -p 80:8080
-v:容器挂载,把容器内文件挂载到宿主机文件上,方便排查错误
查看本地所有的容器:docker ps -a
查看本地正在运行的容器:docker ps
停止容器:docker stop CONTAINER_ID / CONTAINER_NAME
一次性停止所有容器:docker stop $(docker ps -a -q)
启动容器:docker start CONTAINER_ID / CONTAINER_NAME
重启容器:docker restart CONTAINER_ID / CONTAINER_NAME
删除容器:docker rm CONTAINER_ID / CONTAINER_NAME
强制删除容器:docker rmi -f CONTAINER_ID / CONTAINER_NAME
查看容器详细信息:docker inspect CONTAINER_ID / CONTAINER_NAME
进入容器:docker exec -it 0ad5d7b2c3a4 /bin/bash
容器的文件复制与挂载
从宿主机复制到容器:docker cp 宿主机本地路径 容器名字/ID:容器路径 docker cp /root/123.txt mycentos:/home/
从容器复制到宿主机:docker cp 容器名字/ID:容器路径 宿主机本地路径 docker cp mycentos:/home/456.txt /root
宿主机文件夹挂载到容器里:docker run -itd -v 宿主机路径:容器路径 镜像ID docker run -itd -v /root/xdclass/:/home centos:7
自定义镜像
-
基于Docker Commit制作镜像
docker commit 4eb9d14ebb18[原镜像id] mycentos:7[new名称]
docker commit -a “XD” -m “mkdir /home/xdclass” 4eb9d14ebb18 mcentos:7
-a:标注作者
-m:说明注释
查看详细信息:docker inspect [container]
-
基于dockerfile制作镜像(主流的制作镜像方式)
-
Dockerfile 指令
FROM 基于哪个镜像
MAINTAINER 注明作者
COPY 复制文件进入镜像(只能用相对路径,不能用绝对路径)
ADD 复制文件进入镜像(假如文件是.tar.gz文件会解压)
WORKDIR: 指定工作目录,假如路径不存在会创建路径
ENV 设置环境变量
EXPOSE 暴露容器端口
RUN 在构建镜像的时候执行,作用于镜像层面
ENTRYPOINT 在容器启动的时候执行,作用于容器层;dockerfile里有多条时只允许执行最后一条
CMD 在容器启动的时候执行,作用于容器层;dockerfile里有多条时只允许执行最后一条;容器启动后执行默认的命令或者参数,允许被修改
- 命令格式:
- shell命令格式:RUN yum install -y net-tools
- exec命令格式:RUN [ “yum”,“install” ,"-y" ,“net-tools”]
构建:docker build -t mycentos:v2 . (注意最后一个小点,.表示当前路径下,即在dockfile文件所在文件夹下进行操作)
-
实例(对照上面语句进行复习)
# this is a dockerfile FROM centos:7 MAINTAINER XD 123456@qq.com RUN echo "正在构建镜像!!!" WORKDIR /home/njuptwly COPY 123.txt /home/wlynjuptwly RUN yum install -y net-tools
FROM centos:7 ADD jdk-8u211-linux-x64.tar.gz /usr/local RUN mv /usr/local/jdk1.8.0_211 /usr/local/jdk ENV JAVA_HOME=/usr/local/jdk ENV JRE_HOME=$JAVA_HOME/jre ENV CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH ENV PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH ADD apache-tomcat-8.5.35.tar.gz /usr/local RUN mv /usr/local/apache-tomcat-8.5.35 /usr/local/tomcat EXPOSE 8080 #暴露端口,允许访问 ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh","run"] #安装好后进行启动
-
Docker 容器的网络模式
-
bridge:桥接模式,该模式是docker 的默认网络设置,当Docker服务启动时,会在主机上创建一个名为docker0的虚拟网桥,并 选择一个和宿主机不同的IP地址和子网分配给docker0网桥
-
host:主机模式,该模式下容器是不会拥有自己的ip地址,而是使用宿主机的ip地址和端口。
-
none:无网络模式,无法连外网,内部调试用,很少用
查看网络模式: docker network ls
容器通信
-
基于link单向通信
docker run -itd --name tomcat_test --link mysql_test tomcat #启动tomcat应用容器并link到mysql数据库(注意:mysql_test这个容器一定要存在!)
-
brige网桥实现双向通信
创建一个新的网桥:docker network create -d bridge my_bridge
启动第一个容器:docker run -itd --name tomcat_test tomcat
启动第二个容器:docker run -itd --name redis_test reds
把第一个容器加入网桥:docker network connect my_bridge tomcat_test
把第二个容器加入网桥:docker network connect my_bridge redis_test
容器的特权模式
启动一个普通的容器 docker run -itd --name mycentos centos:7 /bin/bash
安装网络工具: yum -y install net-tools
执行 route -n
删除网关: route del default gw 172.17.0.1
启动拥有特权模式的容器: docker run -itd --privileged=true --name mycentos1 centos:7 /bin/bash
进入容器: docker exec -it ef /bin/bash
删除网关成功
Volume数据共享
-
dockerfile
FROM centos:7 VOLUME ["/usr/local"]
注意:在dockerfile里设置volume是无法修改宿主机的挂载路径的
-
使用volume容器共享创建nginx集群
- 使用–volumes-from 实现容器与容器之间volume共享
- 创建nginx1 docker run -itd -p 8080:80 -v /usr/local/nginx/html:/usr/local/nginx/html --name nginx1 mycentos:nginx /usr/local/nginx/sbin/nginx -g “daemon off;” #第一个容器与主机挂载
- 创建nginx2 docker run -itd -p 8081:80 --volumes-from nginx1 --name nginx2 mycentos:nginx /usr/local/nginx/sbin/nginx -g “daemon off;”
- 创建nginx3 docker run -itd -p 8082:80 --volumes-from nginx1 --name nginx3 mycentos:nginx /usr/local/nginx/sbin/nginx -g “daemon off;”
- 对/usr/local/nginx/html/index.html进行修改 打开浏览器进行访问测试
- 用docker inspect 容器ID 查看详细的挂载信息