Docker常用命令
-
docker images 列出本地所有镜像
- docker images -a 列出本地所有镜像及子镜像
- docker images -q 只显示镜像ID
- docker images --digests 显示镜像的摘要信息
- docker images --no-trunc 显示完整的镜像信息
- REPOSITORY 表示镜像的仓库源
- TAG 镜像标签
- IMAGE ID 镜像ID
-
docker search 镜像搜索
- docker search --no-trunc 显示完整的镜像描述
- docker search -s 列出收藏数不少于指定值的镜像
- docker search --automated 只列出automated build类型的镜像
-
docker pull 镜像下载命令
-
docker rmi 镜像删除命令
-
删除单个 docker rmi -f 镜像ID
-
删除多个 docker rmi -f 镜像ID1 镜像ID2
docker rmi -f 镜像名:[tag] 镜像名:[tag]
-
删除全部 docker rmi -f ${docker images -qa}
-
Docker命令(容器)
-
容器镜像是一个软件的轻量级独立可执行软件包,包含运行它所需的一切:代码,运行时系统工具,系统库,设置, 不管环境如何,集装箱化软件都可以运行相同的Linux和Windows应用程序,容器将软件与周围环境隔离开来, 例如开发环境和生产环境之间的差异, 并有助于减少在同一基础架构上运行不同的软件的团队之间的冲突
-
创建并启动容器
- docker run [options] images [command][args]
- –name 容器新名字
- -d 后台运行
- -i 以交互模式运行容器,通常与-t同时使用
- -t 为容器分配一个伪输入终端
- -P 随机端口映射
- -p 指定端口映射,有下面四种格式
- ip:hostPort:containerPort
- ip:containerPort
- hostPort:containerPort
- containerPort
- docker run [options] images [command][args]
-
列出当前所有正在运行的容器
- docker ps [options]
- -a 列出所有容器:当前+历史
- -l 列出最近创建的容器
- -n 显示最近n个创建的容器
- -q 静默模式,只显示容器编号
- –no-trunc 不截断输出
- docker ps [options]
-
退出容器
- exit 停止容器并退出
- ctrl+P+Q 容器不停止退出
-
启动容器
- docker start 容器ID或容器名称
-
重启容器
- docker restart 容器ID或容器名称
-
停止容器
- docker stop 容器ID或容器名称
-
强制停止容器
- docker kill 容器ID或容器名称
-
删除已停止的容器
-
单个删除 docker rm 容器ID
-
多个删除 docker rm -f ${docker ps -aq}
docker ps -aq xargs docker rm
-
-
其他重点内容
-
启用守护式容器
docker run -d centos
docker容器后台运行,就必须有一个前台进程,容器运行的命令如果不是一直挂起的命令,就会自动退出
-
查看容器日志
-
先运行一个程序,在后台被隔两秒输出hello
docker run -d centos /bin/sh -c “while true;do echo hello;sleep 2;done”
-
查看日志
docker logs -tf --tail 10 容器ID
-t 加入时间戳
-f 跟随最新的日志打印
–tail 数字 显示最后多少条
-
-
查看容器运行进程
- docker top 容器ID
-
查询容器内部细节
- docker inspect 容器ID
-
进入正在进行的容器并进行命令交互
-
方式1
docker exec -it 容器ID /bin/bash
-
方式2
docker attach 容器ID
-
两种方式区别
exec 在容器中打开新的终端,并且可以启动新的进程
attach 直接进入容器终端,不会启动新的进程
-
-
进入容器内拷贝文件
- docker cp 容器ID:容器内的路径 主机目录
-
Docker容器卷
容器数据卷
-
宿主机和容器之间
-
使用命令
docker run -it --name mycentos -v /宿主机目录:/容器内目录 --privileged=true centos
- 查看容器是否挂载成功 docker inspect 容器ID
-
使用DockerFile添加
FROM centos VOLUME ["/dataContainer1","/dataContainer2"] CMD echo "finished,------success1" CMD /bin/bash
docker build -t mycentos:1.0 .
需要进入容器查看挂载在宿主机的目录
数据卷容器
- 容器和容器之间,实际上是容器之间通过宿主机共享
- 继承其他容器 docker run -it --name dc2 --volumes-from dc1 mycentos:1.0
DockerFile
-
DockerFile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本
-
流程
- docker从基础镜像运行一个容器
- 执行一条指令并对容器进行修改
- 执行类似于docker commit的操作提交一个新的镜像
- docker再基于刚提交的新镜像运行一个新的容器
- 执行dockerfile的下一个指令再从执行第2点到没有指令
-
体系结构
- FROM 基础镜像
- MAINTAINER 镜像维护者的姓名和邮箱地址
- RUN 容器构建时需要的命令
- EXPOSE 当前容器对外暴露的端口
- WORKDIR 指定容器在创建容器后,终端默认登录进来的工作目录
- ENV 用来在构建镜像过程中设置环境变量
- ADD 将宿主机目录下的文件拷贝进镜像并且ADD命令会自动出来URL和解压tar包
- COPY 类似ADD,拷贝文件和目录到镜像中,不会自动解压,语法COPY src dest COPY [“src”,“dest”]
- VOLUME 容器数据卷,用于数据保存和持久化工作
- CMD 指定一个容器启动时要运行的命令格式
- shell: CMD <命令>
- exec: CMD [‘可执行文件’,‘参数1’,‘参数2’]
- DockerFile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换
- ENTEYPONT 指定一个容器启动时要运行的命令,可以有多个
- ENTEYPONT的目的和CMD一样,都是在指定容器启动程序及参数
- OBBUILD 当构建一个被继承的DockerFile时运行命令,父镜像在被子镜像继承后触发父镜像的onbuild
-
自定义centos镜像
-
创建dockerfile
#基于镜像 FROM centos #作者 MAINTAINER walt1012 #声明一个变量 ENV ROOT_PATH /usr/local #设置工作目录 WORKDIR $ROOT_PATH #安装VIM RUN yum -y install vim #输出工作目录下所有文件及文件夹 RUN ls -lh #对外暴露端口 EXPOSE 80 #输出一个构建成功的字符串 CMD echo "success" CMD /bin/bash
-
构造镜像
- docker build -t mycentos:1.0 .
-
运行镜像
- docker run -it 容器ID /bin/bash
-
进入镜像
-
-
DockerFIle中可以有多个CMD命令,但最后只要一个生效,而且CMD会被docker run之后的命令参数替换掉
-
使用ENTRYPOINT来运行命令,在run运行的参数会追加到新的命令后面
-
自定义tomcat(基于jdk)
-
下载jdk和tomcat上传到linux并和DockerFile放在同一个目录
-
编写DockerFile
FROM centos MAINTAINER walt1012 ENV ROOT_PATH /usr/local/ WORKDIR $ROOT_PATH ADD jdk-8u231-linux-x64.tar.gz ./ ADD apache-tomcat-8.5.43.tar.gz ./ RUN mv jdk1.8.0_231 jdk1.8 RUN mv apache-tomcat-8.5.43 tomcat RUN ls -lh #配置环境变量 ENV JAVA_HOME /usr/local/jdk1.8 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV CATALINA_HOME /usr/local/tomcat ENV CATALINA_BASE /usr/local/tomcat ENV PATH $PATH:JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin EXPOSE 80 CMD tomcat/bin/startup.sh && tail -F tomcat/logs/catalina.out
-
使用DockerFile构造镜像
docker build -t mytomcat:1.0
-
运行测试
docker run -it -d -p 8080:8080 mytomcat:1.0
-
-
制作jar包的镜像
-
上传jar
-
编写DockerFile
FROM openjdk:8u231-jdk-alpine MAINTAINER walt1012 ENV ROOT_PATH /root/ WORKDIR $ROOT_PATH ADD demo.jar ./ VOLUME $ROOT_PATH EXPOSE 8080 ENTRYPOINT ["java","-jar","demo.jar"]
-
生成镜像
docker build -t myjar:1.0
-
运行镜像
docker run -it -d -p 8080:8080 myjar:1.0
-
-
制作war包镜像
-
上传war
-
编写DockerFile
FROM tomcat MAINTAINER walt1012 ENV ROOT_PATH /usr/local/tomcat/webapps/ WORKDIR $ROOT_PATH RUN rm -rf ./* ADD demo.war ./ RUN mv demo.war ROOT.war EXPOSE 8080 ENTRYPOINT ["../bin/catalina.sh","run"]
-
生成镜像
docker build -t mywar:1.0
-
运行镜像
docker run -it -d -p 8080:8080 mywar:1.0
-
本地镜像发布到阿里云
-
登录
docker login --username=walt1012 registry.cn-shanghai.aliyuncs.com
需要输入阿里云密码
-
推送镜像
docker login --username=walt1012 registry.cn-shanghai.aliyuncs.com docker tag [ImageId] registry.cn-shanghai.aliyuncs.com/walt1012/myjar:[镜像版本号] docker push registry.cn-shanghai.aliyuncs.com/walt1012/myjar:[镜像版本号]
-
拉取镜像
docker pull registry.cn-shanghai.aliyuncs.com/walt1012/myjar:[镜像版本号]
Docker四种网络模式
- 桥接模式
- 主机模式