docker&&dockerfile

docker

镜像build

示例

  • 目录结构
.
├── build.sh
└── custom_image/
    ├── Dockerfile
    └── Miniconda3-latest-Linux-x86_64.sh

1 directory, 3 files
  • build.sh
docker build  --network=host -f  ./custom_image/Dockerfile -t custom_image:v0  custom_image 

参数:

  • –network=host: 解决docker build 时网络不通的问题,
  • -f: 指定Dockerfile
  • -t: 镜像tag,
  • custom_image: 镜像build时 上下文所在 目录, 若是 ., 表示当前目录即是上下文所在目录。 方便COPY时知道相对路径, 如:

    COPY ./Miniconda3-latest-Linux-x86_64.sh /home/admin/

运行

build

用sodu docker build …
不然会出现 连不上dockerd(因为dockerd 一般是root权限启动)

Cannot connect to the Docker daemon. Is the docker daemon running on this host?

images

列出本地镜像

run

sudo docker run -itd --net=host  custom_image:v0  

or

sudo docker run -itd --net=host  $imageid

注意 --net 的几种模式

ps

查看有哪些docker容器在运行

sudo docker ps 

本机所有状态的docker容器

sudo docker ps -a 

有些容器在run时,启动命令执行完,就退出了,此时容器不是运行状态,需要ps -a 才能看到

进入docker

sudo docker exec -it  $container_id /bin/bash

stop

终止正在运行中的容器

sudo docker stop $container-id

删除容器, 这些容器可能没有处于运行状态(ps -a查看)

sudo docker rm $container-id

push

sudo docker login ${docker-repo-service}
sudo docker push d o c k e r − r e p o − s e r v i c e / {docker-repo-service}/ dockerreposervice/{user-name}/ i m a g e − n a m e : {image-name}: imagename:{version}

rmi

删除本机镜像

sudo docker  rmi $imageid

若提示还有容器依赖此镜像,可以 ps -a 查看

Issue

  • rpm Error

在docker 里yum install 的时候,有时候会出现类似的错:

Rpmdb checksum is invalid: dCDPT(pkg checksums): sudo.x86_64 0:1.8.6p3-29.el6_9 - u

可以在Dockerfile 里 重建 rpm 的db

RUN set -x && \
    sudo rpm --rebuilddb && \
    sudo yum -y install cmake && \ 

注:有些文章说 用yum clean all,但这个比较危险

ref

dockerfile

RUN:

RUN 命令执行命令并创建新的镜像层,通常用于安装软件包.

  • 注意:多行命令不要写多个RUN,原因是Dockerfile中每一个指令都会建立一层.
    多少个RUN就构建了多少层镜像,会造成镜像的臃肿、多层,不仅仅增加了构件部署的时间,还容易出错。
    RUN书写时的换行符是\
CMD & ENTRYPOINT
  • 相同点:
    • 只能写一条,如果写了多条,那么只有最后一条生效
    • 容器启动时才运行,运行时机相同
  • 不同点:
    • ENTRYPOINT不会被运行的docker run覆盖,而CMD则会被覆盖
    • 如果我们在Dockerfile种同时写了ENTRYPOINT和CMD,并且CMD指令不是一个完整的可执行命令,那么CMD指定的内容将会作为ENTRYPOINT的参数. 如下:
       FROM ubuntu
       ENTRYPOINT ["top", "-b"]
       CMD ["-c"]
      
    • 如果我们在Dockerfile种同时写了ENTRYPOINT和CMD,并且CMD是一个完整的指令,那么它们两个会互相覆盖,谁在最后谁生效, 如下:
      FROM ubuntu
      ENTRYPOINT ["top", "-b"]
      CMD ls -al
      
      那么将执行ls -al ,top -b不会执行。

ref

  • https://blog.csdn.net/sanyuedexuanlv/article/details/79283393
  • https://www.jianshu.com/p/f0a0f6a43907

Service solution

  • 在docker容器中启动多个服务: https://docs.docker.com/config/containers/multi-service_container/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值