docker基础知识

docker三大件:镜像、容器、仓库
镜像:
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
docker image ls—列出本地已存在的镜像
docker image ls -f dangling=true—dangling表示虚悬镜像
docker system df—查看镜像、容器、数据卷所占用的空间
docker image ls --format "{{.ID}}: {{.Repository}}"—利用go语言列出想要的列
docker image rm—有可能仅仅是取消了某个标签而已

image.png

docker image rm $(docker image ls -q -f before=mongo:3.2)—配合使用
充分利用你的想象力和 Linux 命令行的强大
容器
docker container start '容器id'
docker run --rm -it -d -p80:80 vulnerables/web-dvwa
docker logs '容器id'—查看日志
docker container ls=docker ps

进入容器
docker exec -it '容器id' bash—exit不会导致容器停止,推荐使用
docker attach '容器id'—exit会导致容器停止
docker cp /www/runoob 96f7f14e99ab:/www/
docker cp 96f7f14e99ab:/www/ /www/runoob
仓库
docker search
docker login——sunxiine、xiang@123
docker push 'REPOSITORY':'TAG'

docker数据管理

1.数据卷
2.挂载主机目录

docker网络

docker network create -d bridge net-name
docker run -it --rm --name busybox2 --network my-net busybox

$46KAQYA7NT@QM14E(CJ}ZO.png

在容器中安装ping命令

docker run 'image' apt-get install -y ping
运行上条命令可能会提示找不到'包',然后运行
apt-get update

docker commit

docker commit '容器id' 创建一个新镜像

docker中基线检测

需要特权启动docker容器
docker run --privileged(=true)

dockerfile

FROM

FROM就是指定基础镜像
一个Dockerfile中FROM是必备的指令,并且必须是第一条指令
FROM scratch(空白镜像)

RUN

Dockerfile 中每一个指令都会建立一层,一个run命令表示镜像中的一层
每一个 `RUN` 都是启动一个容器、执行命令、然后提交存储层文件变更
 
//七层
FROM debian:stretch

RUN apt-get update
RUN apt-get install -y gcc libc6-dev make wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN mkdir -p /usr/src/redis
RUN tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1
RUN make -C /usr/src/redis
RUN make -C /usr/src/redis install

//一层
FROM debian:stretch

RUN buildDeps='gcc libc6-dev make wget' \
&& apt-get update \
&& apt-get install -y $buildDeps \
&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
&& mkdir -p /usr/src/redis \
&& tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1 \
&& make -C /usr/src/redis \
&& make -C /usr/src/redis install \
&& rm -rf /var/lib/apt/lists/* \
&& rm redis.tar.gz \
&& rm -r /usr/src/redis \
&& apt-get purge -y --auto-remove $buildDeps

1.撰写Dockerfile的时候,要经常提醒自己,这并不是在写Shell脚本,而是在定义每一层该如何构建。
2.Dockerfile支持以换行,以#注释
3.构建Dockerfile的时候每一层的最后添加了清理工作的命令。清理了所有下载、展开的文件,并且还清理了 apt 缓存文件,不然后一直跟随镜像,造成镜像臃肿

docker build

docker build [选项] <上下文路径/URL/->

一般来说,应该会将 Dockerfile 置于一个空目录下,或者项目根目录下。如果该目录下没有所需文件,那么应该把所需文件复制一份过来。如果目录下有些东西确实不希望构建时传给 Docker 引擎,那么可以用 .gitignore 一样的语法写一个 .dockerignore,该文件是用于剔除不需要作为上下文传递给 Docker 引擎的。

Dockerfile指令详解

COPY-复制文件



  • COPY [--chown=<user>:<group>] <源路径>... <目标路径>
  • COPY [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"]

<源路径> 可以是多个,甚至可以是通配符,其通配符规则要满足 Go 的 filepath.Match 规则。如

 COPY hom* /mydir/
 COPY hom?.txt /mydir/

<目标路径> 可以是容器内的绝对路径,也可以是相对于工作目录的相对路径(工作目录可以用 WORKDIR 指令来指定)。目标路径不需要事先创建,如果目录不存在会在复制文件前先行创建缺失目录。
--chown=<user>:<group> 选项来改变文件的所属用户及所属组。

ADD-更高级的复制文件

ADD 指令和 COPY 的格式和性质基本一致,但是在 COPY 基础上增加了一些功能。
ADD命令<源路径>如果是压缩文件的话,会自动解压


秋名山车神
40 声望2 粉丝