docker基础二

1、进阶命令

docker stop $(docker ps -a -q)  //关闭所有已开启的容器

2、镜像提交

// 在启动的容器里修改了某个文件等,通过commit将容器重新打包发布成新的镜像
docker commit -a="author" -m="description" containerId imagesName

3、容器数据卷

1、在启动容器的时候时候 -v 进行外部与容器间的挂载,一对一
docker run -it -v /宿主机绝对路径:/容器内的路径 镜像名
docker run -it -v /xxx:/xxx:ro(只读) xxx

2、使用dockerFile来构建镜像的文本文件,一对多
from centos
volume ["dataVolumeContainer1","dataVolumeContainer2"]
cmd echo "deal question,please wait"
cmd /bin/bash
上述四句命令可以等同于docker的命令
docker run -it -v /host1:/dataVolumeContainer1 -v /host2:/dataVolumeContainer2 centos /bin/bash

在linux上新建文本,将上述四句话贴进去
使用build命令进行构建
docker build -f /home/dockerFilePath -t wx/mycentos . (记得这个点)
然后通过run命令运行进入,容器启动成功后通过inspect查看目录挂载情况

3、使用--volumes-from命令继承其他容器
以2的例子为基础,假设2的centos起名为centos1,使用命令
docker run -it --name centos2 --volumes-from centos1 wx/centos
docker run -it --name centos3 --volumes-from centos2 wx/centos
会发现在centos2和centos3和centos1里dataVolumeContainer1和dataVolumeContainer12数据都会共享,而且如果centos1挂掉了,2和3的内容也是共享的,一直到数据卷没人使用


4、DockerFile

1、DockerFile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本

2、构建步骤:
    2.1 构建DockerFile文件
    2.2 docker build
    2.3 docker run

3、DockerFile的基础要求
    3.1 关键字必须为大写字母且后面最少跟一个参数
    3.2 指令从上到下,顺序执行
    3.3 #表示注释,不会被编译
    3.4 每条指令都会创建一个新的镜像层,并对镜像进行提交

4、Docker执行Docker的大致流程
    4.1 docker从基础镜像从运行一个容器
    4.2 执行一条指令并对容器进行修改
    4.3 执行类似于docker commit的命令,提交一个新的镜像
    4.4 docker基于新的镜像运行一个新的容器
    4.5 重复4.2-4.4的操作,直至指令都执行完毕

5、DockerFile保留字

1、FROM
    基础镜像,当前新镜像是基础哪个镜像的
2、MAINTAINER
    镜像维护者的姓名和邮箱地址
3、RUN
    容器构建的时候需要运行的命令
4、EXPOSE
    当前容器对外暴露的端口号
5、WORKDIR
    指定创建容器后,终端进入bash后来的工作目录
6、ENV
    用来在构建镜像的过程中设置环境变量参数
    这个环境变量可以在任何RUN指令中运行,例如 ENY MY_PATH /home/data
    则 WORKDIR $MY_PATH,终端进入后默认的目录就是/home/data
7、ADD
    将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar包
8、COPY
    类似于ADD,但是COPY不会解析,语法1、COPY src dest 2、COPY ["src","dest"]
9、VOLUME
    容器数据卷,用于数据保存和持久化工作
10、CMD
    指定一个容器启动时需要运行的命令
    DockerFile可以由多个CMD指令,但是只有最后一个会生效,CMD会被docker run之后的参数替换
11、ENTRYPOINT
    和CMD一样,区别在于docker run后的参数是追加,不是替换
12、ONBUILD
    当构建一个被继承的DockerFile时运行的命令,父镜像在被子继承后,父镜像的ONBULD会被触发

6、自定义DockerFile

1、docker拉取的centos默认终端进入路径是/,不支持vim和ifconfig

2、自定义DockerFile

FROM centos
MAINTAINER wwxx<[email protected]>
ENV MYPATH /home
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo "hello dockerFile"
CMD echo $MYPATH
CMD /bin/bash

3、docker run 运行查看
终端进入目录是/home,支持vim和ifconfig
1、CMD和ENTRYPOINT
例如编写dockerFile如下
FROM centos
RUN yum install -y curl
CMD ["curl","-s","http://cip.cc"]

通过build生成镜像后运行容器,会在屏幕打印出ip地址和地区
加上参数-i可以得到头信息,但是如果直接run的时候加上-i会将上述命令覆盖

2、ENTRYPOINT会在原先的命令上拼接命令
FROM centos
RUN yum install -y curl
ENTRYPOINT["curl","-s","http://cip.cc"]

加上-i参数后会在原来的基础上显示头信息
1、新建dockerFile_father
FROM centos
ONBUILD RUN echo "abc-------------666"

2、build构建成images,起名叫centos_father

3、新建dockerFile_son
FROM centos_father
CMD /bin/bash

4、build构建son,会发现触发了父类的ONBUILD命令,打印出一句话来

7、将本地镜像推送到阿里云

1、配置Docker加速器
https://cr.console.aliyun.com/cn-hangzhou/mirrors

2、创建镜像仓库的命名空间
https://cr.console.aliyun.com/cn-hangzhou/namespaces

3、创建镜像仓库
https://cr.console.aliyun.com/cn-hangzhou/repositories

4、将需要推送的容器按照以下命令推送

docker login --username=xxxxxx registry.cn-hangzhou.aliyuncs.com
用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。
您可以在访问凭证页面修改凭证密码。

docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/wangxiaoxing/xiaoxing_container:[镜像版本号]

docker push registry.cn-hangzhou.aliyuncs.com/wangxiaoxing/xiaoxing_container:[镜像版本号]

猜你喜欢

转载自blog.csdn.net/wx774891/article/details/107822122