一、docker
1、docker基本命令
docker version 查看docker版本
docker info 查看docker详细信息
docker --help 查看docker命令
2、镜像命令
Usage: docker [OPTIONS] COMMAND
[root@localhost ~]# docker images #列出本地镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx add 206e386c25f3 8 hours ago 134MB
nginx user e5abc3364a3c 8 hours ago 134MB
<none> <none> 7661e32369e1 8 hours ago 134MB
golang latest 8735189b1527 25 hours ago 941MB
nginx index dd34e67e3371 44 hours ago 133MB
nginx latest dd34e67e3371 44 hours ago 133MB
PEPOSITORY:镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
同一个仓库源可以有多个TAG,表示这个仓库源的不同版本,我们使用REPOSITORY:TAG来定义不同的镜像。如果不指定一个镜像的版本标签,例如只使用tomcat,docker将默认使用tomcat:latest镜像
docker images -a 列出本地所有的镜像
docker images -p 只显示镜像ID
docker images --digests 显示镜像的摘要信息
docker images --no-trunc显示完整的镜像信息
---------------------------------------------------------------------------------
[root@localhost ~]# docker search tomcat #从docker镜像仓库搜寻镜像
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
tomcat Apache Tomcat is an open source implementati… 3097 [OK]
tomee Apache TomEE is an all-Apache Java EE certif… 91 [OK]
dordoka/tomcat Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 base… 57 [OK]
STARS:关注度
docker search -s 30 tomcat 从Docker Hub上查找关注度大于30的tomcat镜像
docker pull tomcat 从Docker Hub上下载tomcat镜像。等价于:docker pull tomcat:latest
docker commit -m "message" -a "auditor" 容器ID 要创建的目标镜像名称:[标签名]提交容器使之成为一个新的镜像。
如:docker commit -m "新的tomcat" -a "lizq" f9e29e8455a5 mytomcat:1.2
docker rmi hello-world 从Docker中删除hello-world镜像
docker rmi -f hello-world 从Docker中强制删除hello-world镜像
docker rmi -f hello-world nginx 从Docker中强制删除hello-world镜像和nginx镜像
docker rmi -f $(docker images -p) 通过docker images -p查询到的镜像ID来删除所有镜像
3、容器命令
docker run [OPTIONS] IMAGE根据镜像新建并启动容器。IMAGE是镜像ID或镜像名称
OPTIONS说明:
?--name=“容器新名字”:为容器指定一个名称
?-d:后台运行容器,并返回容器ID,也即启动守护式容器
?-i:以交互模式运行容器,通常与-t同时使用
?-t:为容器重新分配一个伪输入终端,通常与-i同时使用
?-P:随机端口映射
?-p:指定端口映射,有以下四种格式:
??ip:hostPort:containerPort
??ip::containerPort
??hostPort:containerPort
??containerPort
??
----------------------------------------------
docker ps列出当前所有正在运行的容器
docker ps -a列出所有的容器
docker ps -l列出最近创建的容器
docker ps -n 3列出最近创建的3个容器
docker ps -q只显示容器ID
docker ps --no-trunc显示当前所有正在运行的容器完整信息
exit退出并停止容器
Ctrl+p+q只退出容器,不停止容器
docker start 容器ID或容器名称启动容器
docker restart 容器ID或容器名称重新启动容器
docker stop容器ID或容器名称停止容器
docker kill 容器ID或容器名称强制停止容器
docker rm 容器ID或容器名称删除容器
docker rm -f 容器ID或容器名称强制删除容器
docker rm -f $(docker ps -a -q)删除多个容器
docker logs -f -t --since --tail 容器ID或容器名称查看容器日志
如:docker logs -f -t --since=”2018-09-10” --tail=10 f9e29e8455a5
?-f : 查看实时日志
?-t : 查看日志产生的日期
?--since : 此参数指定了输出日志开始日期,即只输出指定日期之后的日志
?--tail=10 : 查看最后的10条日志
docker top 容器ID或容器名称查看容器内运行的进程
docker inspect 容器ID或容器名称查看容器内部细节
docker attach 容器ID进到容器内
docker exec 容器ID进到容器内
docker cp 容器ID:容器内的文件路径 宿主机路径从容器内拷贝文件到宿主机.
4、Dockerfile
CMD和ENTRYPIOINT 必须要有一个
CMD可以被覆盖,如果有ENTRYPIOINT的话,CMD就是ENTRYPIOINT的参数。
dockerfile的ENTRYPIOINT 对应k8s的yaml文件的COMMAND,CMD对应ar
说明:
FROM:继承基础镜像
MAINTAINER:镜像制作作者信息
RUN:用来执行shell命令
EXPOSE:暴露端口号
CMD:启动容器默认执行的命令
ENTRYPOINT:启动容器真正执行的命令
VOLUME:创建挂载点
ENV:配置环境变量
ADD:复制文件到容器
COPY:复制文件到容器
WORKDIR:设置容器的工作目录
USER:容器使用的用户
FROM centos:8 #初始镜像,
LABEL maintainer="test dockerfile" #打标签
LABEL test=dockerfile
RUN useradd dot #docker build时运行的命令
RUN mkdir /opt/dot
CMD [ "sh", "-c", "echo 1"] #在启动docker时运行,如docker run
#RUN useradd dot && /opt/dot
FROM centos:8
LABEL maintainer="test dockerfile"
LABEL test=dockerfile
ENV test_env1 env1
ENV test_env2 env2
RUN useradd dot
RUN mkdir /opt/dot
#ENTRYPOINT ["echo"]
ENV env1=test1 env2=test2 #设置环境变量
ADD ./index.tar.gz /opt/ #将宿主机的文件,拷贝到容器内并会自动解压包
COPY ./index.tar.gz /opt/dot/ #将宿主机的文件拷贝到容器,但是不会解压。需要注意的是,宿主机都要采用相对路径
WORKDIR /opt/dot #设置容器内程序的工作目录
USER 1000 #指定使用的用户
CMD pwd ; ls
#RUN useradd dot && /opt/dot
#分部制作镜像可以大大减小镜像的体积
# build step
FROM golang:1.14.4-alpine as builder
WORKDIR /opt
COPY main.go /opt
RUN go build /opt/main.go
CMD "./main"
# create real app image
FROM alpine:3.8 #将上面编译好的文件拷贝到新镜像,通俗理解过上面的过程是为了编译镜像,这一个from才是制作真正的镜像
COPY --from=builder /opt/main / #builder是FROM golang:1.14.4-alpine过程的别名
CMD "./opt/main"