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—有可能仅仅是取消了某个标签而已
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
在容器中安装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
命令<源路径>
如果是压缩文件的话,会自动解压
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。