Docker学习

docker

基于基础镜像构建自己的镜像

  • 编写Dockerfile
指令描述
FROM构建的新镜像是基于哪个镜像。例如:FROM centos:6
MAINTAINER镜像维护者姓名或邮箱地址。例如:MAINTAINER Mr.chen
RUN构建镜像时运行的Shell命令。例如:RUN [“yum”,“install”,“httpd”],或者RUN yum install httpd
CMD运行容器时执行的Shell命令(可以被运行时传递的参数覆盖)。例如:CMD ["-c","/start.sh"], 或者CMD ["/usr/sbin/sshd","-D"]或者CMD /usr/sbin/sshd -D
EXPOSE声明容器运行的服务端口。例如:EXPOSE 80 443
ENV设置容器内环境变量。例如:ENV MYSQL_ROOT_PASSWORD 123456
ADD拷贝文件或目录到镜像(可以自动解压缩或者下载) 例如:ADD [“src”,“dest”]或者ADD https://xxx.com/html.tar.gz/var/www/html, 或者:ADD html.tar.gz /var/www/html
COPY拷贝文件或目录到镜像(不能自动解压缩)。例如:COPY ./start.sh /start.sh
ENTRYPOINT运行容器时执行的Shell命令(不能被运行时传递的参数覆盖)。例如:ENTRYPOINT ["/bin/bash","-c","/start.sh"], 或者ENTRYPOINT /bin/bash -c “/start.sh”
VOLUME指定容器挂载点到宿主机自动生成的目录或其他容器, 例如:VOLUME ["/var/lib/mysql"]
USER为RUN,CMD和ENTRYPOINT执行命令指定运行用户, 例如:USER Mr_chen
WORKDIR为RUN,CMD,ENTRYPOINT,COPY和ADD设置工作目录(指定进入容器中默认被切换的目录)。 例如:WORKDIR /data
HEALTHCHECK健康检查。例如:HEALTHCHECK --interval=5m --timeout=3s --retries=3 CMD curl -f http://localhost/
ARG在构建镜像时指定一些参数。例如:ARG user
# from为基础镜像
from centos
# 作者信息
MAINTAINER cheers0606 <cheers0606520@gmail.com>

ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
# ENV LC_ALL en_US.UTF-8

ADD jdk-8u221-linux-x64.tar.gz /usr/local/
ADD apache-maven-3.6.1-bin.tar.gz /usr/local/

RUN ln -s /usr/local/jdk1.8.0_221 /usr/local/jdk
RUN ln -s /usr/local/apache-maven-3.6.1 /usr/local/maven

ADD settings.xml /usr/local/maven/conf/

# 放置源码
RUN mkdir /code
# ADD code /code

ENV JAVA_HOME /usr/local/jdk
ENV MVN_HOME /usr/local/maven

ENV path $path:${JAVA_HOME}/bin:${MVN_HOME}/bin

RUN echo 'starting build code'
RUN echo `ls /code/`

WORKDIR /code
# RUN ${MVN_HOME}/bin/mvn clean package -Dmaven.test.skip=true
RUN echo 'end'
  • build镜像
# 注意,镜像名不能包含大写
docker build -f Dockerfile -t cheers0606/go_manager:v1.0 .
  • 检查是否构建成功
[root@bogon buildGoManager]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
cheers0606/go_manager   v1.0                c382ed166a3b        22 minutes ago      637MB
centos                  latest              0f3e07c0138f        9 days ago          220MB
mysql                   latest              b8fd9553f1f0        4 weeks ago         445MB
centos                  centos7.6.1810      f1cb7c7d58b7        7 months ago        202MB
elasticsearch           6.6.2               1bca39c5a102        7 months ago        842MB
  • 打包镜像
docker save cheers0606/go_manager:v1.0 > go_manager.tar   

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2GnU2cVd-1570859034622)(leanote://file/getImage?fileId=5da028809dd79a4695000000)]

  • 加载镜像
    打包完后的镜像可以发送给别人,然后直接加载镜像即可
docker load -i go_manager.tar

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zDa2CFlS-1570859034622)(leanote://file/getImage?fileId=5da122aa5644053514000002)]

  • 运行镜像
# 运行并进入bash
# -v 为挂载本地路径,冒号前为物理机路径,冒号后为docker环境中的路径,最后的rw为权限,此处为读写
# -it : 目前的理解浅薄,就是要等在容器内的命令执行完毕才会出来到当前操作; 没有-it的加 就相当于在容器内执行一下命令,不等容器内部是否执行完毕直接出来,而我们看见的他在上面是因为容器内的执行快,(行动派可以试试在里面写个循环制造时间验证)
# --name docker名字
docker run -it -v /path/to/code:/code:rw --name=go_manager cheers0606/go_manager:v1.0 /bin/bash

# 运行但不进入bash
docker run -v /path/to/code:/code:rw  cheers0606/go_manager:v1.0 
# 进入正在运行的docker的bash。CONTAINER_ID可以通过docker ps 查看
docker exec -it  CONTAINER_ID  bash

  • 打包正在运行的容器
#-a :提交的镜像作者;
#-c :使用Dockerfile指令来创建镜像;
#-m :提交时的说明文字;
#-p :在commit时,将容器暂停。
[root@bogon buildGoManager]# docker commit -a "cheers0606" -m "mvn docker" bfba3e1cd30c cheers/gomanager:1.0
sha256:b5d08f5dc7b7f019e6d01917d9a47e5c500043236487f8c54e5d428ba604a55f
[root@bogon buildGoManager]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
cheers/gomanager        1.0                 b5d08f5dc7b7        9 seconds ago       739MB
[root@bogon buildGoManager]# docker run -it --name cheers cheers/gomanager:1.0 /bin/bash
# 打包后会包含运行过程中产生的数据。如mvn下载的依赖
[root@ed0e68b82d6b code]# du -sh /usr/share/maven/repository
106M	/usr/share/maven/repository
  • 将打包好的镜像pull到私服
[root@master /]# docker load -i gomanager_wiht_dependencies.tar
9e607bb861a7: Loading layer [==================================================>] 227.4 MB/227.4 MB
da5c1636e6ff: Loading layer [==================================================>]   408 MB/408 MB
c08404f8c986: Loading layer [==================================================>] 10.77 MB/10.77 MB
4cb4dc4134a3: Loading layer [==================================================>]  2.56 kB/2.56 kB
eb5be439dd35: Loading layer [==================================================>]  2.56 kB/2.56 kB
de7789f89c75: Loading layer [==================================================>] 8.192 kB/8.192 kB
469518fbefb5: Loading layer [==================================================>] 2.048 kB/2.048 kB
8aa83b1359d0: Loading layer [==================================================>] 104.9 MB/104.9 MB
Loaded image: cheers/gomanager:1.0
[root@master /]# docker images|grep gomanager
cheers/gomanager                                                                    1.0                                        b5d08f5dc7b7        15 hours ago        739 MB
[root@master /]# docker tag cheers/gomanager:1.0 master:5000/cheers/gomanager:1.0
[root@master /]# docker push master:5000/cheers/gomanager:1.0
The push refers to a repository [master:5000/cheers/gomanager]
8aa83b1359d0: Pushed
469518fbefb5: Pushed
de7789f89c75: Pushed
eb5be439dd35: Pushed
4cb4dc4134a3: Pushed
c08404f8c986: Pushed
da5c1636e6ff: Pushed
9e607bb861a7: Pushed
1.0: digest: sha256:fa84bb455b7ca647343cf8065d14690baf91cc3d563c7669f3974e2f0a1b03c8 size: 1994
  • docker prune 命令
    prune 命令用来删除不再使用的 docker 对象。
# 删除所有未被 tag 标记和未被容器使用的镜像:
docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
# 删除所有未被容器使用的镜像:
docker image prune -a
# 删除所有停止运行的容器:
docker container prune
# 删除所有未被挂载的卷:
# docker volume prune
# 删除所有网络:
 docker network prune
# 删除 docker 所有资源:
docker system prune

gomanager.tar镜像 编译gomanager

# 前提条件:可以连接公司的maven私服(192.168.0.65)
docker load -i gomanager.tar
docker run --name gomanager -it -v /path/to/code:/code:rw gosuncn/gomanager:v1.0 /bin/bash
${MVN_HOME}/bin/mvn clean package -Dmaven.test.skip=true
# 编译完成后,在/path/to/code/target中会生成相应的war包

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5RbJ8Oj9-1570859034623)(leanote://file/getImage?fileId=5da046055644053514000000)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HcG8tlmu-1570859034623)(leanote://file/getImage?fileId=5da046255644053514000001)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值