docker常用命令与应用
docker入门与docker file介绍
原文地址
docker常用命令
- https://blog.csdn.net/leilei1366615/article/details/106267225
docker file 详解
- https://blog.csdn.net/m0_46090675/article/details/121846718?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166745827216782427492149%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166745827216782427492149&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-121846718-null-null.142v62pc_rank_34_queryrelevant25,201v3control_1,213v1t3_control1&utm_term=dockerfile&spm=1018.2226.3001.4187
入门
基础命令
启动docker
- systemctl start docker
关闭docker
(相关资料图)
- systemctl stop docker
重启docker
- systemctl restart docker
docker设置随服务启动而自启动
- systemctl enable docker
查看docker运行状态
- systemctl status docker
查看docker 版本信息
- docker version 、docker info
docker帮助命令
- docker help
docker镜像命令
查看自己服务器中docker镜像列表
- docker images
搜索镜像
- docker search 镜像名
搜索STARS>9000的mysql 镜像
- docker search --filter=STARS=9000 mysql
拉取镜像,拉取latest版本
- docker pull 镜像名
拉取指定版本
- docker pull 镜像名:tag
运行镜像
- docker run 镜像名
运行指定版本
- docker run 镜像名:Tag
删除一个镜像
- docker rmi -f 镜像名/镜像ID
删除多个镜像
- docker rmi -f 镜像名/镜像ID 镜像名/ID
删除全部镜像 -a意思为显示全部,-q意思为只展示ID
- docker rmi -f $
强制删除镜像
- docker image rm 镜像名称/镜像ID
保存镜像
- docker save 镜像名/镜像ID -o 保存的目录
加载镜像
- docker load -i 镜像保存文件位置
- 任何装 docker 的地方加载镜像保存文件,使其恢复为一个镜像
镜像标签
有的时候呢,我们需要对一个镜像进行分类或者版本迭代操作,比如我们一个微服务已经打为docker镜像,但是想根据环境进行区分为develop环境与alpha环境,这个时候呢,我们就可以使用Tag,来进对镜像做一个标签添加,从而行进区分;版本迭代逻辑也是一样,根据不同的tag进行区分
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
- docker tag 源镜像名:TAG 想要生成新的镜像名:新TAG
- 如果忽略tag则会为镜像默认打上latest tag
查看正在运行的容器列表
- docker ps
查看所有容器,包含正在运行的,停止的
- docker ps -a
运行容器
docker run -it -d --name 要取得别名 镜像名:TAG /bin/bash
- -it 表示与容器进行交互式启动
- -d 表示可后台运行容器(守护式运行)
- --name 给要运行的容器起的名字
- /bin/bash 交互路径
实战:启动一个redis 把它的别名取为redis001 并交互式运行 需要的命令 —我这里指定版本号为5.0.5
docker pull redis:5.0.5
- 拉取镜像
docker run -it -d --name redis001 redis:5.0.5 /bin/bash
- 运行
docker ps
查看运行的容器
发现看到了 redis 使用了6379 端口 那么我们在关闭防火墙或开启了安全组的情况下 是否可以进行访问呢?
为了 区分 咱们使用linux 命令 查看一下
netstat -untlp
惊讶的发现,我们redis容器启动占用的 6379端口netstat 没有显示出来?什么情况?赶紧使用 redis desktop manger 连接测试一下
- 因为:占用的6379端口 仅仅是在容器中内部本身的端口,与宿主机的6379端口并无联系,我们通过宿主机Ip:6379访问此redis示例,那自然是找不到的哟!
补充
每一个 Docker容器都是独立和安全的应用平台(我们可以理解为,每一个docker容器都相当于在我们的服务器上占用资源然后开辟了属于自己的一个空间(也可以理解为服务器))
默认情况下,我们是无法通过宿主机(安装docker的服务器)端口来直接访问容器的 ,因为docker容器自己开辟空间的端口与宿主机端口没有联系…
如果外部想要访问容器,那必须得让容器中的端口与宿主机的端口建立联系绑定起来,这个正式的概念叫做 容器端口映射
具体步骤
docker stop 容器名/容器ID
- 首先停止容器
docker rm -f 容器名/容器ID
- 然后删除容器
-p 宿主机端口:容器端口
建立容器端口与服务器端口映射
docker run -it -d --name redis001 -p 8888:6379 redis:5.0.5 /bin/bash
- -p 8888:6379 解析 将容器内部的 6379端口与docker 宿主机(docker装在哪台服务器 哪台服务器就是宿主机)8888 端口进行映射 那通过外部访问宿主机8888端口 即可访问到 docker 容器 6379 端口了
- docker run -itd --name redis002 -p 8888:6379 redis:5.0.5 /bin/bash
那么容器端口映射有没有什么限制呢?
- 有的,虽说每个容器之间,环境都是隔离的,但是宿主机每个端口都是一个,8888端口被redis002容器绑定了,那么其他所有的容器都不可以使用8888这个端口了!!!
进入容器
docker exec -it 容器名/容器ID /bin/bash
- 推荐这种方式
docker attach 容器名/容器ID
退出容器
exit
- 直接退出 未添加 -d(持久化容器)时,执行此命令,容器会被关闭
ctrl + p + q
- 优雅退出 --- 无论是否添加-d参数,执行此命令容器都不会被关闭
停止容器
- docker stop 容器名/容器ID
重启容器
- docker restart 容器名/容器ID
启动容器
- docker start 容器名/容器ID
kill容器
- docker kill 容器名/容器ID
容器文件拷贝 —无论容器是否开启 都可以进行拷贝
docker cp 容器ID/名称:文件路径 要拷贝到外部的路径 | 要拷贝到外部的路径 容器ID/名称:文件路径
从容器内 拷出
- docker cp 容器ID/名称: 容器内路径 容器外路径
从外部 拷贝文件到容器内
- docker cp 容器外路径 容器ID/名称: 容器内路径
查看容器日志
- docker logs -f --tail=需要查看文件末尾的行数 默认all 容器ID
设置容器开机自启动
添加参数--restart=always 便表示,该容器随docker服务启动而自动启动
docker run -itd --name redis002 -p 8888:6379 --restart=always redis:5.0.5 /bin/bash
方法一、担心数据丢了,这说明你在跑容器的时候没有进行数据挂载吧???
数据挂载?
就是将容器内的数据与外部宿主机文件绑定起来,类似一个双持久化,当容器删除时,宿主机文件数据目录仍在,下次启动容器只要将数据目录指向宿主机数据所在位置即可恢复!
命令:-v 宿主机文件存储位置:容器内文件位置
- -v命令可以多次使用,即一个容器可以同时挂载多个文件
- -v 宿主机文件存储位置:容器内文件位置 -v 宿主机文件存储位置:容器内文件位置 -v 宿主机文件存储位置:容器内文件位置
docker run -it -d -p 6379:6379 --name redis505 --restart=always -v /var/lib/redis/data:/data -v /var/lib/redis/conf/:/usr/local/etc/redis/redis.conf redis:5.0.5 --requirepass "password"
方法二:不想删容器,又想让这个容器设置开机自启动,那么我们修改其启动配置即可!
- docker update --restart=always 容器ID/容器名称
- docker container update --restart=always 容器ID/容器名称
- 如上,虽然不删容器就设置了自启动需求满足了,但是,危不危险,这个容器有没有需要数据恢复的情况?自己考量吧!!!
更换容器名
- docker rename 容器ID/容器名称 新容器名
镜像提交与运维
构建一个新的镜像
- docker commit -m=”提交信息“ -a=”作者信息“ 容器名/容器ID 提交后的镜像名:TAG
我们拉取一个tomcat镜像 并持久化运行 且设置与宿主机进行端口映射
docker pull tomcat
docker run -itd -p 8080:8080 --name /bin/bash
访问 咱的端口 发现访问404 这是因为咱配置了阿里云镜像后 所拉取得镜像都是最基础班的 仅仅包含其容器必要数据 例如 容器中 vim vi ll 命令都没有
咱们的webapps 下一个文件都没有 ,访问肯定404罗
- cd /usr/local/tomcat
- ls
不断查看 发现咱 webapps.dist 下是有文件的 我们把它拷贝的webapps 下 然后打包成一个新的镜像 后 访问查看是否进入到首页 不进入404页面
- cp -r webapps.dist/* webapps
- exit
- docker commit -a="leilei" -m "第一次打包镜像,打包后直接访问还会404吗" 容器id tom:1.0
为了区分 咱停止并删除之前tomcat 的容器
- docker stop 容器id
- docker rm -f 容器id
- docker ps -a
运行自己打包的容器
- docker run -d -it -p 6500:8080 --name lei tom:1.0 /bin/bash
- 访问6500 端口进入到了 tomcat 首页 说明 咱commit 镜像成功了
docker 运维命令
可能有时候发布会遇到如下错误:
docker: write /var/lib/docker/tmp/GetImageBlob325372670: no space left on device
这个错误是docker在写入的时候报错无机器无空间
查看docker工作目录
- sudo docker info |grep ”Docker Root Dir“
查看docker磁盘占用总体情况
- du -hs /var/lib/docker/
查看docker的磁盘使用具体情况
- docker system df
删除无用的容器和镜像
删除异常停止的容器
- docker rm
docker ps -a |grep Exited | awk "{print $1}"
- docker rm
删除名称或标签为none的镜像
- docker rmi -f
docker images |grep "
" | awk "{print $3}"
- docker rmi -f
清除所有无容器使用的镜像
- docker system prune -a
- 注意,此命令只要是镜像无容器使用(容器正常运行)都会被删除,包括容器临时停止
查找大文件
- find / -type f -size +100M -print0 | xargs -0 du -h | sort -nr
查找指定docker使用目录下大于指定大小文件
- find / -type f -size +100M -print0 | xargs -0 du -h | sort -nr |grep "/var/lib/docker/overlay2/*"
- ex:我这里是查找 /var/lib/docker/overlay2/* 开头的且大于100m的文件
docker file
一、Dockerfile(制作镜像脚本化)
1.1 什么是Dockerfile
Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),用于构建镜像。每一条指令构建一层镜像,因此每一条指令的内容,就是描述该层镜像应当如何构建。
dockerfile 用于指示 docker image build 命令自动构建Image的源代码
是纯文本文件
示例
- docker build -f /path/Dockerfile
1.2 为什么要使用Dockerfile
问题:在dockerhub中官方提供很多镜像已经能满足我们的所有服务了,为什么还需要自定义镜像
- 核心作用:日后用户可以将自己应用打包成镜像,这样就可以让我们应用进行容器运行.还可以对官方镜像做扩展,以打包成我们生产应用的镜像。
完整镜像结构图
Dockerfile的格式
两种类型的行
- 以#开头的注释行
- 以专用”指令(instruction)“开头的指令行
由Image Builder顺序执行各指令,从而完成Image构建
二、docker build工作原理
语法
- docker build [选项] <上下文路径/URL/->
上下文
Docker 在运行时分为 Docker 引擎(也就是服务端守护进程)和客户端工具
- Docker 的引擎提供了一组 REST API(Docker Remote API) ,而如 docker 命令这样的客户端工具,则是通过这组 API 与 Docker 引擎交互,从而完成各种功能。
- 一切都是使用的远程调用形式在服务端(Docker 引擎)完成
docker build 命令构建镜像,其实并非在本地构建,而是在服务端,也就是 Docker 引擎中构建的
那么在这种客户端/服务端的架构中,如何才能让服务端获得本地文件呢?
- 构建的时候,用户会指定构建镜像上下文的路径,docker build 命令得知这个路径后,会将路径下的所有内容打包,然后上传给 Docker 引擎
- Docker 引擎收到这个上下文包后,展开就会获得构建镜像所需的一切文件
为什么会有人误以为.·是指定 Dockerfile 所在目录呢?
- 因为在默认情况下,如果不额外指定 Dockerfile 的话,会将上下文目录下的名为 Dockerfile 的文件作为 Dockerfile
- 实际上 Dockerfile 的文件名并不要求必须为 Dockerfile,而且并不要求必须位于上下文目录中,比如可以用 -f …/Dockerfile 参数指定某个文件作为 Dockerfile
- 当然,一般大家习惯性的会使用默认的文件名 Dockerfile,以及会将其置于镜像构建上下文目录中。
三、 Dockerfile常用指令
官网地址
- https://docs.docker.com/engine/reference/builder/
FROM
指定构建新image是使用的基础image,通常必须是dockerfile的第一个有效指令,但其前面也可以出现ARG指令
指定基础镜像,必须为第一个命令
格式
- FROM
- FROM :
- FROM @
示例
- FROM mysql:5.6
注:
- tag或digest是可选的,如果不使用这两个值时,会使用latest版本的基础镜像
MAINTAINER(新版即将废弃)
维护者信息
格式:
MAINTAINER
示例:
MAINTAINER bertwu
MAINTAINER xxx@163.com
MAINTAINER bertwu
LABEL
附加到image之上的元数据,键值格式
用于为镜像添加元数据
格式:
LABEL
= = = ...
示例:
- LABEL version="1.0" description="这是一个Web服务器" by="IT笔录"
注:
- 使用LABEL指定元数据时,一条LABEL指定可以指定一或多条元数据,指定多条元数据时不同元数据
- 之间通过空格分隔。推荐将所有的元数据通过一条LABEL指令指定,以免生成过多的中间镜像。
ENV
以键值格式设定环境变量,可悲气候的指令所调用,且基于新生成的image运行的image运行的container中也会存在这些变量
设置环境变量
格式:
ENV
# 之后的所有内容均会被视为其 的组成部分,因此,一次只能设置一个变量 ENV
= ... #可以设置多个变量,每个变量为一个" = "的键值对,如果 中包含空格,可以使用\来进行转义,也可以通过""来进行标示;另外,反斜线也可以用于续行
示例:
ENV myName John Doe
ENV myDog Rex The Dog
ENV myCat=fluffy
RUN
以FROM中定义的image为基础环境有运行指定命令,生成结果将作为新image的一个镜像层,并可由后续指令所使用
构建镜像时执行的命令
RUN用于在构建镜像时执行命令,其有以下两种命令执行方式:
shell执行
格式:
RUN
exec执行
格式:
RUN ["executable", "param1", "param2"]
示例:
RUN ["executable", "param1", "param2"]
注:
- RUN指令创建的中间镜像会被缓存,并会在下次构建中使用。如果不想使用这些缓存镜像
- 可以在构建时指定--no-cache参数,如:docker build --no-cache
CMD
基于改dockerfile生成的image运行container时,CMD能够指定容器中默认运行的程序,因而其可应该定义一次
构建镜像后调用,也就是在容器启动时才进行调用。
格式:
CMD ["executable","param1","param2"] (执行可执行文件,优先)
CMD ["param1","param2"] (设置了ENTRYPOINT,则直接调用ENTRYPOINT添加参数)
示例:
- CMD echo "This is a test." | wc -l
CMD ["/usr/bin/wc","--help"]
注:
- CMD不同于RUN
- CMD用于指定在容器启动时所要执行的命令
- 而RUN用于指定镜像构建时所要执行的命令
ENTRYPOINT
类似于CMD指令的功能,但不能被命令行指定要运行的应用程序覆盖,且与CMD共存时,CMD的内容将作为该指令中定义的成都的参数
配置容器,使其可执行化。配合CMD可省去"application",只使用参数。
格式:
- ENTRYPOINT ["executable", "param1", "param2"] (可执行文件, 优先)
ENTRYPOINT command param1 param2 (shell内部命令)
示例:
- FROM ubuntuENTRYPOINT ["ls", "/usr/local"]CMD ["/usr/local/tomcat"]
- 之后,docker run 传递的参数,都会先覆盖cmd,然后由cmd 传递给entrypoint ,做到灵活应用
注:
- ENTRYPOINT与CMD非常类似,不同的是通过docker run执行的命令不会覆盖ENTRYPOINT,
- 而docker run命令中指定的任何参数,都会被当做参数再次传递给CMD。
- Dockerfile中只允许有一个ENTRYPOINT命令,多指定时会覆盖前面的设置,
- 而只执行最后的ENTRYPOINT指令。
- 通常情况下,ENTRYPOINT 与CMD一起使用,ENTRYPOINT 写默认命令,当需要参数时候 使用CMD传参
WORKDIR
为RUN、CMD、ENTRYPOINT、COPY和ADD等指令指定工作目录
工作目录,类似于cd命令
格式:
WORKDIR /path/to/workdir
示例:
WORKDIR /a (这时工作目录为/a)
WORKDIR b (这时工作目录为/a/b)
WORKDIR c (这时工作目录为/a/b/c)
注:
- 通过WORKDIR设置工作目录后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT、ADD、COPY等命令都会在该目录下执行。
- 在使用docker run运行容器时,可以通过-w参数覆盖构建时所设置的工作目录。
ADD
与COPY指令的功能相似,但ADD额外也支持使用URL指定的资源作为源文件
将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget
格式:
ADD
... ADD ["
",... " "] 用于支持包含空格的路径
示例:
ADD hom* /mydir/ # 添加所有以"hom"开头的文件
ADD hom?.txt /mydir/ # ? 替代一个单字符,例如:"home.txt"
ADD test relativeDir/ # 添加 "test" 到 `WORKDIR`/relativeDir/
ADD test /absoluteDir/ # 添加 "test" 到 /absoluteDir/
COPY
- 复制主机上或者前一阶段构建结果中(需要使用--from选项)文件或目录生成新的镜像层
- 功能类似ADD,但是是不会自动解压文件,也不能访问网络资源
VOLUME
指定基于新生成的image运行container时期望作为volume使用的目录
用于指定持久化目录(指定此目录可以被挂载出去)
格式:
VOLUME ["/path/to/dir"]
示例:
VOLUME ["/data"]
VOLUME ["/var/www", "/var/log/apache2", "/etc/apache2"
注:
一个卷可以存在于一个或多个容器的指定目录,该目录可以绕过联合文件系统,并具有以下功能:
- 1 卷可以容器间共享和重用
- 2 容器并不一定要和其它容器共享卷
- 3 修改卷后会立即生效
- 4 对卷的修改不会对镜像产生影响
- 5 卷会一直存在,直到没有任何容器在使用它
EXPOSE
指定基于新生成的image运行container时期望暴露的端口,但实际暴露与否取决于docker run命令的选项,支持tcp和udp协议
指定于外界交互的端口
格式:
EXPOSE
[ ...]
示例:
EXPOSE 80 443
EXPOSE 8080
EXPOSE 11211/tcp 11211/udp
注:
- EXPOSE并不会让容器的端口访问到主机。要使其可访问,需要在docker run运行容器时通过-p来发布这些端口,或通过-P参数来发布EXPOSE导出的所有端口
- 如果没有暴露端口,后期也可以通过-p 8080:80方式映射端口,但是不能通过-P形式映射
USER
为dockerfile中该指令后面的RUN、CMD和ENTRYPOINT指令中要运行的应用程序指定运行者身份UID,以及一个可选的GID
指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。使用USER指定用户时,可以使用用户名、UID或GID,或是两者的组合。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户
格式:
- USER user
- USER user:group
- USER uid
- USER uid:gid
- USER user:gid
- USER uid:group
示例:
USER www
注:
- 使用USER指定用户后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT都将使用该用户。
- 镜像构建完成后,通过docker run运行容器时,可以通过-u参数来覆盖所指定的用户。
ARG
定义专门用于build过程中的变量,但仅对该指定之后的调用生效,其值可由命令行选项“--build-arg”进行传递
用于指定传递给构建运行时的变量(给dockerfile传参),相当于构建镜像时可以在外部为里面传参
格式:
ARG
[= ]
示例:
ARG siteARG build_user=wwwFrom centos:7ARG parameterVOLUME /usr/share/nginxRUN yum -y install $parameterEXPOSE 80 443CMD nginx -g "daemon off;"
可以这如下这样灵活传参
- docker build --build-arg=parameter=net-tools -t nginx:01 .
ONBUILD
触发器,生效于由该dockerfile构建出新的image被用于另一个dockerfile中的FROM指令作为基础镜像时
用于设置镜像触发器
格式:
- ONBUILD [INSTRUCTION]
示例:
- ONBUILD ADD . /app/src
- ONBUILD RUN /usr/local/bin/python-build --dir /app/src
注:
- NNBUID后面跟指令,当当前的镜像被用做其它镜像的基础镜像,该镜像中的触发器将会被钥触发
STOPSIGNAL
- 用于通知container终止的系统调用信号
HEALTHCHECK
- 定义检测容器应用的健康状态的具体方法
SHELL
- 为容器定义运行时使用的默认shell程序,LInux系统默认使用["/bin/sh","-c"],windows默认使用["cmd","/S","/C"]
四、制作镜像
如果有多个RUN,自上而下依次运行,每次运行都会形成新的层,建议&& 放入一行运行
如果有多个CMD,只有最后一个运行
如果有多个Entrypoint,只有最后一个运行
如果CMD和entrypoint共存,只有entrypoint运行,且最后的CMD会当做entrypoint的参数
镜像制作分为两个阶段
- docker build阶段 基于dockerfile制作镜像 (RUN,用于此阶段的运行命令)
- docker run阶段 基于镜像运行容器 (CMD,基于image run容器时候,需要运行的命令)
- docker build 基于第一阶段的镜像被别人from制作新镜像 (entrypoint 或onbuild 基于镜像重新构建新镜像时候在此阶段运行的命令)
4.1 源码编译制作nginx镜像
This my first nginx Dockerfile
Version 1.0
Base images 基础镜像
FROM centos
MAINTAINER 维护者信息
MAINTAINER bertwu
ENV 设置环境变量
ENV PATH /usr/local/nginx/sbin:$PATH
ADD 文件放在当前目录下,拷过去会自动解压
ADD nginx-1.8.0.tar.gz /usr/local/ADD epel-release-latest-7.noarch.rpm /usr/local/
RUN 执行以下命令
RUN rpm -ivh /usr/local/epel-release-latest-7.noarch.rpmRUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && yum clean allRUN useradd -s /sbin/nologin -M www
WORKDIR 相当于cd
WORKDIR /usr/local/nginx-1.8.0
RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make install
RUN echo "daemon off;" >> /etc/nginx.conf
EXPOSE 映射端口
EXPOSE 80
CMD 运行以下命令
CMD ["nginx"]
- 编译镜像- docker build -f 脚本文件名(默认dockerfile可以省略) -t 镜像名字 .(表示当前路径)- 示例- docker build -f dockerFile -t mynginx:0.1.0 .
4.2 制作简单镜像
- root@ubuntu:~# mkdir myapproot@ubuntu:~/myapp# vim Dockerfile # 编写DockerfileFROM alpine:3.15LABEL Maintainer="bertwu bertwu6688@edu.com"ADD hosts /etc/hosts
root@ubuntu:~/myapp# vim hosts # 编写文件root@ubuntu:~/myapp# cat hosts127.0.0.1 localhost127.0.0.1 localhost.localdomain172.100.100.100 xxx.com
root@ubuntu:~/myapp# docker image build . # 构建镜像Sending build context to Docker daemon 3.072kBStep 1/3 : FROM alpine:3.15---> c059bfaa849cStep 2/3 : LABEL Maintainer="bertwu bertwu6688@edu.com"---> Running in 63324216f4ecRemoving intermediate container 63324216f4ec---> bb69e6b659a2Step 3/3 : ADD hosts /etc/hosts---> 0d6e00e31ce6Successfully built 0d6e00e31ce6root@ubuntu:~/myapp# docker image tag 0d6e00e31ce6 myapp:1.0 # 添加标签root@ubuntu:~/myapp# docker image ls # 查看镜像REPOSITORY TAG IMAGE ID CREATED SIZEmyapp 1.0 0d6e00e31ce6 About a minute ago 5.59MB
root@ubuntu:~/myapp# docker image inspect myapp:1.0 | grep -i maint"Maintainer": "bertwu bertwu6688@edu.com""Maintainer": "bertwu bertwu6688@edu.com"
4.3 自作1.1版本
- root@ubuntu:~/myapp# vim repositorieshttps://mirrors.aliyun.com/alpine/v3.15/mainhttps://mirrors.aliyun.com/alpine/v3.15/community
root@ubuntu:~/myapp# cat DockerfileFROM alpine:3.15LABEL Maintainer="bertwu bertwu6688@edu.com"ADD repositories /etc/apk/repositories # 添加自己指定的repositoriesRUN apk update && apk add nginx bash # 安装nginx与bash
root@ubuntu:~/myapp# docker run --name myapp -it --rm myapp:1.1 /bin/bash # 制作镜像bash-5.1# which nginx/usr/sbin/nginxbash-5.1#bash-5.1# nginx -vnginx version: nginx/1.20.2bash-5.1#bash-5.1# cat /etc/apk/repositorieshttps://mirrors.aliyun.com/alpine/v3.15/mainhttps://mirrors.aliyun.com/alpine/v3.15/community
4.4 构建centos镜像
下面通过编写Dockerfile文件来制作Centos镜像,并在官方镜像的基础上添加vim和net-tools工具。首先在/home/dockfile 目录下新建文件Dockerfile。然后使用上述指令编写该文件。
Dockerfile[root@localhost dockerfile]# cat DockerfileFROM centos:7MAINTAINER bertwu 1258398543@qq.comENV MYPATH /usr/localWORKDIR $MYPATHRUN yum -y install vim net-toolsEXPOSE 80CMD /bin/bash
逐行解释该Dockerfile文件的指令:
- FROM centos:7 该image文件继承官方的centos7
- ENV MYPATH /usr/local:设置环境变量MYPATH
- WORKDIR $MYPATH:直接使用上面设置的环境变量,指定/usr/local为工作目录
- RUN yum -y install vim && net-tools:在/usr/local目录下,运行yum -y install vim和yum -y install net-tools命令安装工具,注意安装后的所有依赖和工具都会打包到image文件中
- EXPOSE 80:将容器80端口暴露出来,允许外部连接这个端口
- CMD:指定容器启动的时候运行命令
下面执行build命令生成image文件,如果执行成功,可以通过docker images来查看新生成的镜像文件。
- docker build -t mycentos:1.0 .
可以使用 docker history 镜像id 查看镜像构建过程
- docker history e0316e2ed3a5
进入容器,看看是否能够执行ifconfig 及vim命令
- docker run -it mycentos:1.0
4.5 构建springboot应用
- cat Dockerfile
FROM openjdk:8-jre # jar包基于jdk ,war包基于tomcatWORKDIR /appADD demo-0.0.1-SNAPSHOT.jar app.jar # 将上下文中 jar包复制到 /app目录下,并且重命名为app.jarEXPOSE 8081 # 暴露端口ENTRYPOINT[ "java" , "-jar" ] # 启动应用固定命令CMD["app.jar"] # 动态传递jar包名details/121846718
标签:
- docker常用命令与应用
- 托管给“相寓” 房子变“脏了”
- 各地拼经济谋发展⑩丨西部数谷:宁夏的突破与链接|环球报道
- 转弯未让直行,危险如影随形 环球快播
- 天天滚动:供销总社加大推动农资保供稳价
- 长峰医院火灾事故71名伤员转至9家医院,遇难患者平均年龄71.2岁
- 世界看点:浩欧博(688656)4月20日主力资金净卖出33.30万元
- 浦林成山2022年营收81.5亿元 海外业务同比增加31.9%|天天看点
- 天天快看点丨买火车票,该如何选座?为何高铁座位编号没有“E”?
- 巴比食品:一季度净利润同比增长2724.36%
- 嬉游探世界
- 凯悦推出新的中高端品牌Hyatt Studios,进军美洲市场
- 知网:有不法分子冒用知网名义行骗,将保留追责权利 世界热门
- 衣服被雨淋了干了能再穿吗?
- 世界时讯:斯诺克世锦赛:特鲁姆普首轮出局 威尔逊打出147分
- 水电大省“缺水”有解
- 快资讯:国家职业技能证书查询网站_国家职业技能证书查询
- 怎样才能快速减肥_快速减肥的办法有哪些呢
- V观财报|*ST辅仁涉嫌信披违规被立案!股价年内腰斩,或将退市_微速讯
- 如何与自尊心超强的孩子交谈_孩子自恋是怎样形成的 家长要学会接纳 环球即时
- 水羊股份:4月19日融资买入750.41万元,融资融券余额1.82亿元|今日报
- 【当前热闻】2023年4月20日连玉米期货早盘行情
- 快讯:超额储蓄转化为消费须多方发力
- 今日时讯:欧冠改制后晋级半决赛次数榜 欧冠4强出炉2席皇马与AC米兰率先晋级欧冠半决赛_世界新视野
- 清雅贤居_清雅
- 对数函数换底公式的推导_对数函数换底公式 当前快讯
- 苹果窃取商业秘密,一审败诉需赔款31亿美元_环球关注
- 古塘新村入画来-当前动态
- 当前播报:Python面向对象编程-上下文管理器
- 环球热文:中国工业互联网的快速发展获业界点赞和认可
- 【大力优化营商环境 加快高质量发展】河北法院系统发挥审判职能 优化法治化营商环境|每日信息
- 焦点信息:卡塔尔与阿联酋有望数周内复交
- 环球今日报丨发改委:将促进消费持续恢复,下大力气稳定汽车消费
- 每日热文:银行打工人,到手的工资还被追回
- 长白山: 关于长白山旅游股份有限公司2022年度营业收入扣除情况的专项说明 全球时快讯
- 北京通报长峰医院火灾事故救治调查进展,多组信息回应社会关切
- 发改委:正在抓紧研究起草关于恢复和扩大消费的政策文件-百事通
- 电科数字:与华为在智能制造等行业开展深度合作 焦点资讯
- 心灵鸡汤:感悟幸福的人生课-全球观热点
- 【转帖】台湾城管是什么水平?_每日热点
- 异地住房公积金能否办理“商转公”?洛阳市住房公积金管理中心回复
- 坦克400 Hi4
- 华福证券:给予安科瑞持有评级,目标价位42.52元|全球微资讯
- 山西的美写进歌里唱出去
- 印度高温最新消息 世界焦点
- 全国春灌进度已近五成 灌溉面积超1.6亿亩|世界讯息
- 滑落合并官网在哪下载 最新官方下载安装地址
- “工会驿站”如何建好又用好-全球视点
- 高新兴:4月18日融资买入907.52万元,融资融券余额3.67亿元
- DailyFX:加拿大CPI后,美元/加元缩小日内跌幅,仍在1.3400以下的下跌区域 新动态
-
土豆的吃法怎么做(土豆的吃法怎么做视频)
1、孜然锅巴土豆:材料:土豆2个、孜然粉适量、辣椒粉适量、小米椒4条、葱花适量、盐少许做法:(1)将...
-
200多年前,外商就来广州抢订单了?!
“最火单品”就是它外销广彩第一大碗英国皇室远渡重洋来订货色彩绚烂,精工细绘富丽堂皇,堆金织玉是人...
-
全球观天下!异度神剑3蔽日巨兽的面具获取视频流程攻略
异度神剑3蔽日巨兽的面具材料是很多玩家不知道怎么获取的,异度神剑3游戏的画面精美,场景细腻,音乐优...
-
新益昌(688383):4月19日技术指标出现观望信号-“黑三兵”
资金流向数据,主力资金净流入105 40万元,占总成交额17%,其中超大单净流入0 00元,大单净流入105 4
-
全球动态:2023年4月19日期货交易每日必读
【盘前须知】1 中金所公告,30年国债期货合约TL2306、TL2309和TL2312将于2023年4月21日挂牌上市。2 国...
-
SpaceX“星舟”重型运载火箭推迟发射
中新社旧金山4月17日电当地时间17日上午,美国太空探索技术公司(SpaceX)原定在得克萨斯州进行的“星舟”...
-
「数据」天花板「DOTS-AD」来了!海天瑞声赋能自动驾驶下半场技术腾飞 环球热点
今天,2023上海车展盛大开幕,这次除了整车厂,自动驾驶企业也相继带来了很多全新产品发布。相信以BEV感...
-
支持应用文件夹,消息称 watchOS 10 引入全新主屏幕布局
IT之家4月19日消息,消息源@analyst941在最新推文中,分享了适用于AppleWatch的watchOS10系统的相关信息,将
-
球员调查之选建队核心:字母哥独一档,约基奇东契奇前三
球员调查之选建队核心:字母哥独一档,约基奇东契奇前三,杰森,约基奇,东契奇,球员调查,阿德托昆博,斯蒂...
-
焦点速讯:海南五指山:牙胡梯田入画来
近日,位于五指山市毛阳镇的牙胡梯田,绿意盎然,村民在辛勤劳作,呈现出一幅优美的乡村田园图景。
-
当前看点!中央环保督察组与福建安溪县政府联手整治不达标猪场
养猪行情:收到中央第五环保督察组交办的关于安溪县龙门镇龙山村生猪养殖污染环境的信访件后,安溪县委...
-
焦点精选!天使投资人叫什么 天使投资人什么意思
今天来聊聊关于天使投资人叫什么,天使投资人什么意思的文章,现在就为大家来简单介绍下天使投资人叫什...
-
北京多家艺术院团联合推出演出季
本报北京4月18日电(记者贺勇)记者从第九届五月演出季发布会上获悉:中国评剧院、中国杂技团等9家艺术...
-
马卡报:皇马和巴萨的和平正式结束,一切承诺和协议都被埋葬
北京时间今天凌晨,皇马在俱乐部官推发布了一段4分多钟的视频,驳斥拉波尔塔称皇马为“体制俱乐部”的说...
-
焦点!能效1000倍于GPU Intel终结矿卡业务:仅存活了1年多
能效1000倍于GPUIntel终结矿卡业务:仅存活了1年多
-
【天天热闻】魔术师:湖人想赢G2一定不能自满 得更努力&更有侵略性
直播吧4月19日讯明日NBA季后赛,湖人将继续在客场挑战灰熊。今天,湖人名宿魔术师约翰逊更推道:“如果...
-
世界通讯!图解万辰生物一季报:第一季度单季净利润同比增116.39%
万辰生物2023一季报显示,公司主营收入7 62亿元,同比上升553 23%;归母净利润5263 35万元,同比上升11
-
环球精选!社保基数高好还是低好(社保基数高好还是低好)
1、缴高好,个人虽然负担会多些,但相对来讲企业也会多缴,那么企业以1000为基数缴费,楼主的社保费等于...
-
全球连线|从“无人问津”到“技术领跑”:“洋专家”见证中国制造业迈向高质量发展 天天热资讯
洗杯、投茶、醒茶、冲泡……娴熟的泡茶动作无一不显示着爱尔兰人帕特里克对中国文化的熟悉与喜爱拥有多...
-
越野超级混动架构Hi4-T加持,坦克400/500家族登台
4月18日,高端豪华越野品牌坦克SUV携旗下“越野新能源家族”正式亮相第20届上海车展,并发布全新升级的...
-
环球观焦点:紫江企业(600210):4月18日北向资金增持12.47万股
4月18日北向资金增持12 47万股紫江企业。近5个交易日中,获北向资金减持的有3天,累计净减持183 57万...
-
强国复兴有我丨“绘妫川映文明”Ta们用画笔为创城添“彩”_环球微资讯
点击蓝字关注我们如果说文明是一副美丽的画卷,那么Ta们就是背后的“小画家”,今年是我区争创全国文明...
-
【天天时快讯】北京加快“科教医养展”资源转化 扩大数字人民币覆盖率
扩大数字人民币在北京市小额高频消费场景的覆盖率,在“北京消费季”等活动中增添数字人民币元素。扩大...
-
全球热点![快讯]斯巴克瑞公布2022年年度分红方案预案
CFi CN讯:斯巴克瑞(股票代码:834552)公布2022年年度权益分派预案公告。根据公司2023年4月18日披露...
-
全球金融危机四伏,内需增长是关键!经济学家连平:房地产是“重点产品” 当前讯息
美国股市当前的繁荣是建立在经济复苏放缓、通胀威胁加剧等基本面问题之上的,美联储宽松货币政策提供的...
-
每日快讯!我国首次发布国家农作物优良品种推广目录 引导推动品种更新换代
央视网消息:今天(4月18日),农业农村部举行新闻发布会,相关负责人介绍了我国首次发布的国家农作物优...
-
2024国省考备考起航
2023国考以及各省公务员考试笔试均已经结束,大部分省份的面试也已完成或接近尾声,对于已经尘埃落定的...
-
首都在线:公司是一家覆盖全球的云计算服务解决方案提供商|新动态
同花顺金融研究中心4月18日讯,有投资者向首都在线提问,今年到现在贵公司业务主要是哪些开展顺利吗 ...
-
吞噬星空:洪和雷神被救走,三大长老秘密勾结,断更已成定局
不过在两人昏迷之前,好歹重创了金角巨兽,而金角巨兽狂怒之下就要吞了两人,好发泄被重创之仇。洪和雷...
-
普通人好玩跑步的最佳时间是什么时候?-环球热头条
1、在练习一项运动之前,我们应该首先了解这项运动的重点和注意事项,这样做可以给我们带来更好的运动效...
-
巴基斯坦西北部山体滑坡至少3人死亡
据澎湃新闻报导,当地时间4月18日,巴基斯坦西北部边境地区发生大规模山体滑坡,造成至少3人死亡,数人...
-
比亚迪“全家桶”亮相上海车展:U8预售价109万,王朝、海洋新品首发 天天速递
作为名副其实的新能源销冠,以及新车发布密集的产品大户,这一次,比亚迪(002594)把自家新车发布舞台搬...
-
孕初期吃什么?|每日视讯
才怀孕35天应该就是刚刚怀孕,这个时候每个人的身体反应和情况不同,对应可以吃的东西就不一样,整个孕...
-
小米13 Ultra最高支持16+1Tb 价格不高|世界实时
小米13Ultra在今晚发布,新机外观和影像能力已经公布,而在存储方面,小米13Ultra最高搭载16+1Tb的旗舰...
-
官方:前国脚赵旭日、邹正加盟中甲球队广西平果哈嘹 天天速看料
杰里奇(UrosDjeric),塞尔维亚外援,1992-05-28出生于塞尔维亚,身高195cm,司职中锋,曾在塞尔维亚、...
-
家门口安装摄像头会不会侵犯邻居隐私?
家门口安装摄像头会不会侵犯邻居隐私?合肥中院判决:小区业主可视门铃摄像头应拆除为了生活安全,越来越多...
-
Apple 宣布推出具有行业领先 4.15% 利率的储蓄账户 每日播报
经过大量传言,Apple终于宣布推出AppleCard储蓄账户。它从今天开始可用,并具有行业领先的4 15%的
-
期货外盘内盘什么意思_内盘和外盘是什么意思 天天精选
1、在技术分析系统中经常有“外盘”、“内盘”出现。2、委托以卖方成交的纳入“外盘”,委托以买方成交的
-
西高院:科创板IPO申请获证监会同意注册批复 当前报道
证监会4月18日发布关于同意西安高压电器研究院股份有限公司(以下简称“西高院”)首次公开发行股票注册...
-
为了和女朋友分手说自己在监狱_为了和女朋友分手
1、男女之间的差别很大,女生说100次分手,也不见得有一次是真的,男生提1次分手,多半是深思熟虑的结果...
-
2023天津五一听角儿相声大会观演指南_世界热文
➤➤2023天津五一听角儿相声大会观演指南演出名称:【津味浓包袱足】听角儿相声大会演出介绍:听角儿,...
-
安徽唯一!这个“大本营”竣工验收-世界动态
4月15日,合肥国际陆港项目(一期)顺利竣工验收,标志着合肥步入“国家级中欧班列集结中心”快车道。作...
-
哈利波特魔法觉醒巨蛛领地6星怎么通关 通关方法_当前热门
哈利波特魔法觉醒巨蛛领地6星怎么通关通关方法,
-
财政部:2023年安排中央对地方转移支付超10万亿元-每日视讯
App4月18日消息,财政部预算司副司长李大伟表示,2023年安排中央对地方转移支付100625亿元,增长3 6%,...
-
全球动态:爱玛电动车电池饿死了怎么办(爱玛电动车电池)
大家好,小乐来为大家解答以上的问题。爱玛电动车电池饿死了怎么办,爱玛电动车电池这个很多人还不知道,...
-
三甲专家社区惠民公益活动北京医院专场举办
三甲专家社区惠民公益活动北京医院专场举办工人日报-中工网记者姬薇压力性尿失禁是常见的女性泌尿系疾病...
-
2022围巾十大品牌排行榜_围巾哪个牌子好
1、CACUSS2、巴利 BALLY3、博柏利4、古驰 Gucci5、范思哲 Versace6、普拉达 Prada7、玛
-
直击|博联智能携明星产品矩阵惊艳亮相133届广交会!
4月15日,第133届中国进出口商品交易会(广交会)在广州盛大开幕。BroadLink博联智能携最新RM万能遥控、蓝...
-
广东惠州11只产业子基金集中签约 总规模近95亿元
广东惠州市资本赋能制造业高质量发展论坛暨产业基金集群发布会18日在惠州举行,会上推介了惠州首只百亿...
-
京东物流与民生银行沈阳分行签署战略合作协议-焦点快报
电商报快讯:4月18日消息,中国民生银行沈阳分行近日与京东物流签署战略合作协议。沈阳分行行长助理张大...
X 关闭
X 关闭