linux怎么查看本机内存大小
223
2022-10-24
dockerfile及docker命令总结
一、安装docker
卸载旧版本
apt-get remove docker docker-engine docker.io containerd runc
安装依赖包
sudo apt-get update $ sudo apt-get install \ apt-transport-\ ca-certificates \ curl \ gnupg \ lsb-release
添加key
curl -fsSL | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
添加源
echo \ "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
安装最新版本
apt-get install docker-ce docker-ce-cli containerd.io
或安装指定版本
apt-cache madison docker-ce
apt-get install docker-ce=
查看docker服务
systemctl status docker
二、Dockerfile
什么是dockerfile?
Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker通过读取Dockerfile中的指令自动生成映像。
docker build命令用于从Dockerfile构建映像。可以在docker build命令中使用-f标志指向文件系统中任何位置的Dockerfile。
例:
docker build -f /path/to/a/Dockerfile
结构
DockerFile分为四部分组成:基础镜像信、维护者信息、镜像操作指令和容器启动时执行指令。例如:
#第一行必须指令基于的基础镜像
From ubutu
#维护者信息
MAINTAINER docker_user docker_user@mail.com
#镜像的操作指令
apt/sourcelist.list
RUN apt-get update && apt-get install -y ngnix
RUN echo "\ndaemon off;">>/etc/ngnix/nignix.conf
#容器启动时执行指令
CMD /usr/sbin/ngnix
指令介绍
Dockerfile 有以下指令选项:
FROM
MAINTAINER
RUN
CMD
EXPOSE
ENV
ADD
COPY
ENTRYPOINT
VOLUME
USER
WORKDIR
ONBUILD
1、FROM
用法: FROM
或者 FROM:
FROM指定构建镜像的基础源镜像,如果本地没有指定的镜像,则会自动从 Docker 的公共库 pull 镜像下来。
b .FROM必须是 Dockerfile 中非注释行的第一个指令,即一个 Dockerfile 从FROM语句开始。
FROM可以在一个 Dockerfile 中出现多次,如果有需求在一个 Dockerfile 中创建多个镜像。 如果FROM语句没有指定镜像标签,则默认使用latest标签。
2、MAINTAINER
用法: MAINTAINER
指定维护者的信息
3、 RUN
格式为Run 或者Run [“executable” ,”Param1”, “param2”]
每条RUN指令将在当前镜像基础上执行指定命令,并提交为新的镜像,后续的RUN都在之前RUN提交后的镜像为基础,镜像是分层的,可以通过一个镜像的任何一个历史提交点来创建,类似源码的版本控制。
exec 方式会被解析为一个 JSON 数组,所以必须使用双引号而不是单引号。exec 方式不会调用一个命令 shell,所以也就不会继承相应的变量,如:
RUN [ "echo", "$HOME" ]
这种方式是不会达到输出 HOME 变量的,正确的方式应该是这样的
RUN [ "sh", "-c", "echo", "$HOME" ]
RUN产生的缓存在下一次构建的时候是不会失效的,会被重用,可以使用--no-cache选项,即docker build --no-cache,如此便不会缓存。
4、CMD
支持三种格式:
CMD [“executable” ,”Param1”, “param2”]使用exec执行,推荐
CMD command param1 param2,在/bin/sh上执行
CMD [“Param1”, “param2”] 提供给ENTRYPOINT做默认参数。
每个容器只能执行一条CMD命令,多个CMD命令时,只最后一条被执行。
5、EXPOSE
EXPOSE
告诉 Docker 服务端容器对外映射的本地端口,需要在 docker run 的时候使用-p或者-P选项生效。
6、 ENV
ENV
ENV
指定一个环节变量,会被后续RUN指令使用,并在容器运行时保留。
例子:
ENV myName="John Doe" myDog=Rex\ The\ Dog \
myCat=fluffy
等同于
ENV myName John Doe
ENV myDog Rex The Dog
ENV myCat fluffy
7、ADD
ADD
该命令将复制指定的 到容器中的 。 其中 可以是Dockerfile所在目录的一个相对路径;也可以是一个URL;还可以是一个tar文件(自动解压为目录)。
8、COPY
COPY
复制本地主机的 (为Dockerfile所在目录的相对路径)到容器中的 。
当使用本地目录为源目录时,推荐使用 COPY 。
9、ENTRYPOINT
ENTRYPOINT "executable", "param1", "param2"
ENTRYPOINT command param1 param2 (shell form)
配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖,而CMD是可以被覆盖的。如果需要覆盖,则可以使用docker run --entrypoint选项。
每个 Dockerfile 中只能有一个ENTRYPOINT,当指定多个时,只有最后一个生效。
10、VOLUME
VOLUME ["/data"]
创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。
11、USER
USER daemon
指定运行容器时的用户名或 UID,后续的RUN、CMD、ENTRYPOINT也会使用指定用户。
12、WORKDIR
WORKDIR /path/to/workdir
为后续的RUN、CMD、ENTRYPOINT指令配置工作目录。可以使用多个WORKDIR指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径。
WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd
最终路径是/a/b/c。
WORKDIR指令可以在ENV设置变量之后调用环境变量:
ENV DIRPATH /path
WORKDIR $DIRPATH/$DIRNAME
最终路径则为 /path/$DIRNAME。
13、 ONBUILD
ONBUILD [INSTRUCTION]
配置当所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令。
例如,Dockerfile 使用如下的内容创建了镜像 image-A:
[...]
ONBUILD ADD . /app/src
ONBUILD RUN /usr/local/bin/python-build --dir /app/src
[...]
如果基于 image-A 创建新的镜像时,新的 Dockerfile 中使用 FROM image-A 指定基础镜像时,会自动执行 ONBUILD 指令内容,等价于在后面添加了两条指令。
# Automatically run the following
ADD . /app/src
RUN /usr/local/bin/python-build --dir /app/src
使用ONBUILD指令的镜像,推荐在标签中注明,例如 ruby:1.9-onbuild。
创建镜像
通过Docker Build 创建镜像。
# V 1.0 # Base images 基础镜像 FROM centos:7.9.2009 #MAINTAINER 维护者信息 MAINTAINER ruyi #ENV 设置环境变量 ENV PATH /usr/local/nginx/sbin:$PATH #ADD 文件放在当前目录下,拷过去会自动解压 ADD nginx-1.20.1.tar.gz /usr/local/ #RUN 执行以下命令 RUN yum install epel-release -y RUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && yum clean all RUN useradd -s /sbin/nologin -M #WORKDIR 相当于cd WORKDIR /usr/local/nginx-1.20.1 RUN ./configure --prefix=/usr/local/nginx --user=--group=--with---with-pcre && make && make install #EXPOSE 映射端口 EXPOSE 80 #CMD 运行以下命令 CMD ["nginx" "-g" "daemon off;"]
2、用Dockerfile生成镜像,通过docker build指令来生成docker镜像
docker build -t mynginx .
docker images
如果Dockerfile在当前目录下,输入点.就可以进行加载当前目录下的Dockerfile
如果不在当前目录下需要运行docker build -t mynginx
查看镜像是否生成:
3、通过docker镜像生成一个docker容器
docker run -d -p 8000:80 --name mynginx_test mynginx
参数说明:
-d 后台运行
-it 前台交互式运行
-P 80 将宿主机的一个未使用的随机端口映射到容器的22端口
-p 8000:80 将宿主机的2222端口映射到容器的22端口
--name mynginx_test 给容器命名为mynginx_tes
mynginx 使用这个镜像镜像创建docker容器
三、常用命令总结
镜像:
搜索
docker search
下载
docker pull
查看
docker images
docker image ls
删除
docker rmi
导出
docker save
导入
docker load < ./name.tar.gz
通过容器创建镜像
docker commit
通过dockerfile创建镜像
docker build -t
docker build -f /path/to/a/Dockerfile
换标签
docker tag
上传镜像
docker login #登录
docker pull <登录id名称/image_name>
容器:
查看
docker ps
ps默认只会显示容器在“running”的状态的,容器列表
-a 会查看到所有的容器列表
-q 只显示容器id
进入容器
docker attach
docker exec -it #进入运行的容器,exit后容器孩子运行
停止
docker stop
开始
docker start
删除
docker rm
重新启动
docker restart
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~