一、docker命令
#基础命令百度一大堆
主要对镜像进行一些操作:
docker search/pull/push <images> #搜索/拉取/推送 <镜像>
docker image save <images> > images.tar.gz #导出某个镜像
docker save $(docker images | grep -v REPOSITORY | awk 'BEGIN{OFS=":";ORS=" "}{print $1,$2}') -o images.tar #导出所有镜像
docker images load -i images.tar.gz #导入镜像
docker image rmi <images>:v1 #删除镜像:版本
docker images inspect <images> #查看镜像详细信息
docker tag <images> <新的镜像名字>:v1 #如果要讲镜像传进harbor,要打成:10.0.0.100/library/busybox:v1
镜像核心:分层
docker commit -a="angus" -m="angus's tomcat remove doc" b2a3d7b67722 angustomcat:1.0 #将已有的容器打包成镜像:-a 为作者 -m 为描述信息 b2a3d7b67722运行中的容器的ID(或者名字) angustomcat 镜像名:版本
对容器进行的操作:
docker container inspect 容器名称 /bin/bash #/id #查看容器详细信息、ip
docker exec -it 容器名称 /bin/bash #进入容器
-------------------------------------------------
二、dockerfile
#dockerfile四部分:基础镜像、维护者、镜像操作、容器启动脚本
1、基础
格式:
FROM <image>
FROM <image>:<tag>
FROM <image>@<digest>
2、维护者
格式:
MAINTAINER <name>
3、构建镜像运行的命令 #重点
1、RUN - shell执行
RUN <command>
RUN yum -y install wget
`注`
1)RUN 指令创建的中间镜像会被缓存,并会在下次构建中使用。如果不想使用这些缓存镜像,可以在构建时指定 --no-cache 参数,如:docker build --no-cache
2)Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。例如:
ROM centos
RUN yum install wget \
&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
&& tar -xvf redis.tar.gz
`如上,以 && 符号连接命令,这样执行后,只会创建 1 层镜像`
2、ADD - 添加文件到容器,本地文件会自动解压,网络文件不会 - 类似`wget`
ADD <src> <dest>
ADD *.log /log/
3、COPY - 类似ADD,不能自动解压,不能访问网络资源
4、CMD - 容器启动时调用的命令
CMD command(shell)
CMD ["/usr/bin/ls","/etc"]
5、ENTRYPOINT - 配置容器
使用类似CMD,并且CMD可以直接在它的基础上加参数
ENTRYPOINT ["/usr/bin/ls","/etc"]
CMD ["/tmp"]
`注`
docker run命令中的参数会传递给ENTRYPOINT,但是只能传递一次,多个的话只用最后一个;CMD不会
6、LABEL - 为镜像添加元数据
LABEL <key>=<value> <key>=<value>
`注`
推荐一个LABEL 指定多个元数据,空格间隔
7、ENV - 环境变量
ENV <key> <value1 vlaue2> #多个值对应一个key
ENV <key1>=<value1> <key2>=<vlaue2> #key中有空格,用\转义,\也可以续行
8、EXPOSE - 容器端口
EXPOSE 11211/tcp 11211/udp #默认tcp
9、VOLUME - 持久卷
格式:
VOLUME ["/path/to/dir"]
示例:
VOLUME ["/data"]
VOLUME ["/var/www", "/var/log/apache2", "/etc/apache2"]
`注`
一个卷可以存在于一个或多个容器的指定目录,该目录可以绕过联合文件系统,并具有以下功能:
1 卷可以在容器间共享和重用
2 容器并不一定要和其它容器共享卷
3 修改卷后会立即生效
4 对卷的修改不会对镜像产生影响
5 卷会一直存在,直到没有任何容器在使用它
10、WORKER - 工作目录,类似cd
WORKDIR /a (这时工作目录为/a)
WORKDIR b (这时工作目录为/a/b)
11、USER - 指定用户
使用用户名、UID、GID,或者其中两者结合
`注`
docker run 运行镜像时,可通过-u来覆盖指定用户
12、AGE - 指定变量
AGE site
AGE site=1
13、ONBUILD - 设置镜像触发器 - 当所构建的镜像被作为基础镜像,该镜像的触发器会触发
ONBUILD RUN yum -y install nginx
14、制作Dockerfile
vim Dockerfile ---
docker build -f xxx
三、使用容器的建议
1. 不要以拆分方式进行应用程序发布
2. 不要创建大型镜像
3. 不要在单个容器中运行多个进程
4. 不要再镜像内保存凭证,不要依赖IP地址
5. 以非root用户运行进程
6. 不要使用“最新”标签
7. 不要利用运行中的容器创建镜像
8. 不要使用单层镜像
9. 不要将数据存放在容器内