docker的基础操作
基础命令
docker --help
docker search centos \\搜索centos的镜像
docker pull centos \\拉取centos镜像
docker images \\显示本地镜像仓库
docker tag centos:old-tag centos:new-tag \\修改tag
docker login \\登录镜像仓库,登录后才可以推送镜像push
docker push zx/centos:new-tag \\推送本地镜像到远程仓库
docker run -ti centos bash -p 12345:80 \\启动并以sh登录一个镜像,-tid在后台启动,-p将容器的80端口映射到本地的12345
docker ps \\查看当前运行的镜像,-ap打印所有容器的CONTAINER ID
docker inspect CONTAINER ID \\查看CONTAINER ID容器的详细信息,CONTAINER ID通过docker ps查看
docker logs -f CONTAINER ID \\查看CONTAINER ID容器的日志
docker exec -ti CONTAINER ID bash \\登录CONTAINER ID容器
docker rm CONTAINER ID \\删除CONTAINER ID容器,-f强制删除运行中的容器
docker rmi IMAGE ID \\删除docker images中的镜像,在删除之前需要停止并删除所有的运行中的容器docker kill $(docker ps -aq);docker rm $(docker ps -aq)
如果两个镜像IMAGE ID一致,可以使用docker rmi REPOSITORY:TAG删除
docker stop CONTAINER ID \\停止CONTAINER ID容器
docker history CONTAINER ID \\查看容器的构建信息
存储持久化
mkdir /mnt/nginxhtml \\在物理机创建一个挂载点
docket -tid -v /mnt/nginxhtml:/usr/share/nginx/html -p 2222:80 nginx \\-v将本地目录映/mnt/nginxhtm射给docker中的/usr/share/nginx/html
此时在容器中/usr/share/nginx/html创建的文件都会保留在本地物理机上,即使容器被删除
docker cp 2.html CONTAINER ID:/usr/share/nginx/html \\将本地的2.html文件拷贝到CONTAINER ID容器的/usr/share/nginx/html
制作镜像
1.将运行中的镜像保存
docker commit CONTAINER ID images_name
2.通过docker build制作
Dockerfile 的常用命令如下:
⚫ FROM:继承基础镜像
⚫ MAINTAINER:镜像制作作者的信息,已弃用,使用LABEL替代
⚫ LABEL:k=v形式,将一些元数据添加至镜像
⚫ RUN:用来执行shell命令
⚫ EXPOSE:暴露端口号
⚫ CMD:启动容器默认执行的命令,会被覆盖
⚫ ENTRYPOINT:启动容器真正执行的命令,不会被覆盖
⚫ ENV:配置环境变量
⚫ ADD:复制文件到容器,一般拷贝文件,压缩包自动解压
⚫ COPY:复制文件到容器,一般拷贝目录
⚫ WORKDIR:设置容器的工作目录
⚫ USER:容器使用的用户
⚫ ARG:设置编译镜像时传入的参数
创建镜像所使用的的文件必须在docker build的工作路径下
docker build -t centos:user .
CMD 可以被覆盖:
# docker run --rm centos:env-cmd echo "cover..."
cover...
ENTRYPOINT 指定的不能被直接覆盖:
# docker run --rm centos:entrypoint cannot cover...
envir:test version:1.0
ENTRYPOINT 指定--entrypoint 参数,比如指定 entrypoint 为 ls,后置命令为/tmp,就相当于 ENTRYPOINT 是 ls,CMD 是/tmp
# docker run --rm --entrypoint=ls centos:entrypoint /tmp
anaconda-post.log
yum.log
镜像体积优化
1.使用体积更小的基础镜像
如alpine,nginx:alpine,jdk:alpine,scratch等
scratch是一个空镜像,没有基础命令
2.多阶段构建
直接编译会导致生成的镜像体积巨大,所以可以先编译导出文件,再用COPY的方式将文件导入基础镜像,可以
大大缩小生成容器的体积
1 2 3 4 5 6 7 8 9 10 | # cat hw.go <br>package main<br>import "fmt"<br>func main() {<br> fmt.Println("Hello World!")<br>}<br><br># cat dockerfile #build step FROM golang:1.14.4-alpine AS bbll \\首先选择一个有go环境的镜像,将编译的文件导出到变量bbll。如果不导出到变量默认第一个FROM阶段为0,在最后可以使用-- from =0引用,<br> 下一个FROM默认为1,可以使用-- from =1引用,以此类推<br> WORKDIR /opt COPY hw.go /opt RUN go build /opt/hw.go $生成应用镜像 FROM alpine:3.12 \\选择小的基础镜像 COPY -- from =bbll /opt/hw . \\引用上阶段编译好的变量,并COPY到镜像的/opt/hw文件中,.拷贝到当前目录 CMD [ "./hw" ] |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通