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" ]

 

posted @   捌玖  阅读(42)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示