跟着狂神学docker 的笔记

Dockerfile

dockerfile 是用来构建docker 镜像的文件

步骤:

  1. 编写一个dockerfile 文件

  2. docker build 构建成一个镜像

  3. docker run 运行镜像

  4. docker push 发布镜像(DockerHub,阿里云镜像仓库)

DockerFile 构建过程

基础知识:

  1. 每个保留关键字(指令)都是大写字母

  2. 执行从上到下顺序执行

  3. #表示注解

  4. 每一个指令都会创建提交一个新的镜像层,并提交。

dockerfile 是面向开发的,我们要发布项目,做镜像,就需要编写dockerfile 文件,这个文件十分简单

Docker镜像逐渐成为企业交付的标准,必须要掌握。

DockerFile 构建文件,定义了一切的步骤,源代码

DockerImages: 通过DockerFile 构建生成的镜像,最终发布和运行的产品

Docker窗口:窗口就是镜像运行起来提供服务器

DockerFile指令

FROM        #基础镜像
MAINTAINER  #镜像的作者,姓名+邮箱
RUN         #镜像构建的时候需要运行的命令
ADD         #步骤,tomcat 镜像,添加内容
WORKDIR     #镜像的工作目录
VOLUME      #挂载目录
EXPOSE      #暴露端口呵呵,跟-p 类型
CMD         #指定容器启动的时候运行的命令,只有最后一个会生效,可以被替代
ENTRYPOINT  #指定容器启动的时候运行的命令 可以追加命令
ONBUILD     #当构建一个被继承 DockerFile 这个时候就会运行 ONBUILD 的命令
COPY        #类似 add,将文件拷贝到镜像中
ENV         #构建的时候设置环境变量

 

实战测试

DockerHub 中99%镜像都是从这个基础镜像壹来的FROM scra

创建一个自己的centos

FROM centos
MAINTAINER ben
​
ENV MYPATH /usr/local
WORKDIR $MYPATH
​
RUN yum -y install vim
RUN yum -y install net-tools
​
EXPOSE 80
​
CMD echo $MYPATH
CMD echo "---end---"
CMD /bin/bash
​
#2.通过这个这个文件构建镜像
命令 docker build -f dockfile 文件路径 -t 镜像名:[tag]
Successfully built c0f8081136b6
Successfully tagged mycenos:0.1
​
#3.测试运行
​

我们可以列出本地进行的变更历史

docker history

 

CMD 和 ENTRYPOINT 区别

CMD         #指定这个窗口启动的时候需运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT  #指定这个窗口启动的时候要运行的命令,可以追加命令

测试CMD

[opc@instance-20210428-2058 docker-test]$ vim dockerfile-cmd-test 
FROM centos
CMD ["ls","-a"]
​
[opc@instance-20210428-2058 docker-test]$ sudo docker build -f dockerfile-cmd-test -t cmdtest .
Sending build context to Docker daemon  3.072kB
Step 1/2 : FROM centos
 ---> 5d0da3dc9764
Step 2/2 : CMD ["ls","-a"]
 ---> Running in 287da2cf95d2
Removing intermediate container 287da2cf95d2
 ---> 1c6ee0167cca
Successfully built 1c6ee0167cca
Successfully tagged cmdtest:latest
[opc@instance-20210428-2058 docker-test]$ sudo docker run 1c6ee0167cca
​
#想追加一个命令  -l  ls -al
[opc@instance-20210428-2058 docker-test]$ sudo docker run 1c6ee0167cca -l
docker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "-l": executable file not found in $PATH: unknown.
ERRO[0002] error waiting for container: context canceled
​
#cmd 的清理下 -l 替换了CMD["ls","-a"]命令, -l 不是命令所以报错
[opc@instance-20210428-2058 docker-test]$ vim docker-entrypoint-test
FROM centos
ENTRYPOINT ["ls","-a"]
​
[opc@instance-20210428-2058 docker-test]$ sudo docker build -f docker-entrypoint-test -t entrypoint .
Sending build context to Docker daemon  4.096kB
Step 1/2 : FROM centos
 ---> 5d0da3dc9764
Step 2/2 : ENTRYPOINT ["ls","-a"]
 ---> Running in 3d552a2897d6
Removing intermediate container 3d552a2897d6
 ---> 4597889b20f8
Successfully built 4597889b20f8
Successfully tagged entrypoint:latest
​
#区别在于这里可以直接加参数 相当于ls -al
[opc@instance-20210428-2058 docker-test]$ sudo docker run 4597889b20f8 -l
total 0
drwxr-xr-x   1 root root   6 Dec 10 01:56 .
drwxr-xr-x   1 root root   6 Dec 10 01:56 ..
-rwxr-xr-x   1 root root   0 Dec 10 01:56 .dockerenv
lrwxrwxrwx   1 root root   7 Nov  3  2020 bin -> usr/bin
drwxr-xr-x   5 root root 340 Dec 10 01:56 dev
drwxr-xr-x   1 root root  66 Dec 10 01:56 etc
drwxr-xr-x   2 root root   6 Nov  3  2020 home
lrwxrwxrwx   1 root root   7 Nov  3  2020 lib -> usr/lib

编写Dockerfile 文件,官方命名 Dockerfile

3、构建镜像

发布自己的镜像

Docke hub

  1. 注册账号

  1. 确定这个账号可以登录

  2. 在我们服务器上提交自己的镜像

[opc@instance-20210428-2058 ~]$ sudo docker login -u ben202006
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
​
Login Succeeded
[opc@instance-20210428-2058 ~]$ 
  1. 登录完毕后就可以提交镜像了

    docker push 

docker tag imageId ben/tomcat:1.0
​

  1. 登录 阿里去

  2. 找到会被骂镜像服务

  3. 创建命名空间

  4. 创建容器镜像

  1. 浏览器信息

Docker 网络

网络Docker0

 

三个网络

#问题 Docker 是如何 

 sudo docker run -d -P --name tomcat01 tomcat

 

自定义网络

查看所有的docker 网络

网络模式

bridget: 桥接

none : 不配置网络

host: 主机模式,和宿主机共享网络

container: 容器网络连通

测试

# 我们直接启动命令 --net bridget,而
sudo docker run -d -P -t --name tomcat01 tomcat
​
#我们可以自定义一个网络
# -- driver gridge
# --subnet 192.168.0.0/16 
#--gateway 198.168.0.1
[opc@instance-20210428-2058 ~]$ sudo docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
e588dbc3b74aa8a44c1b9634b67205d6c0c25c2a697eca4239252d29efa21efc
​
​
[opc@instance-20210428-2058 ~]$ sudo docker run -d -P --name tomcat-net-01 --net mynet tomcat
7f218a38ece0cc071a40aed1de172a2979ffc6737ae842b2cf2cab00fe8ff385
[opc@instance-20210428-2058 ~]$ sudo docker run -d -P --name tomcat-net-02 --net mynet tomcat
d9adce66b8b1cfd9b4b60618451b5c0870805ea2155f9ac8f867a6731cf92dfa
[opc@instance-20210428-2058 ~]$ sudo docker exec -it tomcat-net-01 ping 192.168.0.3
OCI runtime exec failed: exec failed: container_linux.go:380: starting container process caused: exec: "ping": executable file not found in $PATH: unknown
[opc@instance-20210428-2058 ~]$ 

好处:

redis -不同的集群使用不同的网络,保证集群是安全和健康的

### 回答1: 这个错误提示意思是等待容器时出现了上下文取消的情况。可能是由于某些原因导致容器无法启动或者启动过程中被中断了。建议检查容器的配置和环境,确保其正常运行。同时,也可以查看相关日志信息,以便更好地定位问题。 ### 回答2: 在Docker容器中,当容器启动时出现“error waiting for container: context canceled”消息时,这通常意味着 Docker 主机本身不能完成容器启动的要求。 该消息通常与Docker守护进程中断有关,可能是由于内存或磁盘空间不足或其他系统资源瓶颈导致的。如果Docker主机不足以提供所需的资源,它可能会自动取消执行容器的上下文,并停止容器的执行。 此外,该错误可能还涉及Docker主机与容器之间的其他通信问题,例如无法连接到容器网络或错误的环境变量设置。 要解决这种错误,可以尝试增加Docker主机的资源,以确保有足够的内存可用来支持容器。您还可以尝试检查主机上的磁盘空间,以确保该环境拥有必要的空间。另外可以指定正确的环境变量,检查Docker主机和容器之间的网络通信是否正确,以确保它们可以正确地互相通信。 当然,此错误可能是由其他许多因素引起的。如果这些快速调整仍然不能解决问题,建议尝试查看Docker日志以便找到更详细的错误信息,并进行相应的修复。 ### 回答3: “error waiting for container: context canceled”错误通常是由于Docker容器在等待特定资源时尝试完成任务而被中断或取消导致的。实际上,越来越多的Docker开发人员在处理容器中出现此错误时感到困惑,因为这个错误提示并不是很明显。 首先,我们需要了解Docker环境中的“context”概念。在Docker中,context是一个用于指定操作目标位置的路径或URL的集合。对于Docker客户端命令而言,它们会基于上下文执行操作。Docker客户端可以与Docker引擎通信,以便在特定环境中构建和运行容器。 当Docker容器无法获得所需资源并等待时,如果在太长时间内没有获得响应,Docker守护进程就会因为过期而取消这个容器的上下文(context)。此时,容器就会出现错误,并提示“error waiting for container: context canceled”错误信息。 因此,解决这个错误问题的关键是确保Docker容器可以及时获得所需资源,并避免在过长的时间内等待容器资源。可以尝试以下方法解决这个问题: 1. 调整Docker容器的资源限制,避免资源瓶颈导致无法获取所需资源,并能够加速资源请求。 2. 防止其他程序或脚本占用Docker容器所需的资源,从而导致Docker容器无法获取所需资源。 3. 确保使用的Docker镜像是最新的,并且能够与当前的Docker环境完全兼容,以避免版本冲突的问题。 总的来说,“error waiting for container: context canceled”错误是一个比较普遍的Docker容器问题。需要针对具体的情况进行调整,例如优化容器设置或更改Docker相关配置等操作,来避免这个错误的发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值