Docker核心(二)

一、什么是Image

  1. image是由一层层的layer构成
    在这里插入图片描述
    image是read-only
  2. 看看官方提供tomcat的image
    在这里插入图片描述
  3. image就是一个Dockerfile,分析一下Dockerfile的语法
FROM: 指定基础镜像(centos、 openjdk:8 等等)
eg:FROM openjdk:8-jdk


ENV:环境变量(可以通过docker run --e key=value修改)
eg:ENV CATALINA_HOME /usr/local/tomcat


RUN:container中执行命令(比如安装软件,配置环境等,换行可以使用"")
eg:RUN set -e \
	&& nativeLines="$(catalina.sh configtest 2>&1)" \
	&& nativeLines="$(echo "$nativeLines" | grep 'Apache Tomcat Native')" \
	&& nativeLines="$(echo "$nativeLines" | sort -u)" \
	&& if ! echo "$nativeLines" | grep 'INFO: Loaded APR based Apache Tomcat Native library' >&2; then \
		echo >&2 "$nativeLines"; \
		exit 1; \
	fi


LABEL:标签(设置标签名、版本号、作者、邮箱)
eg:LABEL name="Tomcat" version="v1.0" author="xxx" email="xxxxx@163.com"


VOLUME:文件挂载(数据存放目录)
eg:VOLUME /var/lib/mysql


COPY:将主机文件复制到容器中(单纯复制,不会解压)
eg:COPY demo-spring.jar /usr/local/demo


ADD: 类似COPY(会解压)
eg: ADD demo-spring.jar /usr/local/demo


WORKDIR:指定镜像的工作目录,之后的命令都是基于此目录工作,若不存在则创建
eg:
WORKDIR /root 
ADD app.yml test/    (app.yml会被复制到/root/test下)


CMD:容器启动的时候执行的命令(如果有多个,只有最后一个生效)
eg:CMD ["java", "-jar", "demo-spring.jar"]


ENTRYPOINT: 和CMD类似(执行docker run 时  CMD命令会被覆盖而 ENTRYPOINT不会)
eg:ENTRYPOINT ["java", "-jar", "demo-spring.jar"]


EXPOSE:暴露镜像的端口 可以用-p指定
eg:EXPOSE 3306 33060  (默认容器3306 映射主机33060)

  1. 自定义Dockerfile
    创建个Hello world的SpringBoot项目
    mvn:package得到demo-spring.jar
    mkdir /dockerfile/demo
    rz demo-spring.jar
    vim Dockerfile (内容如下)
FROM openjdk:8

LABEL name="demo-spring" version="1.0" author="wfq"

COPY demo-spring.jar demo-spring.jar

ENTRYPOINT ["java","-jar","demo-spring.jar"]
  1. 构建自定义的Dockerfile
//build( "."当前目录下构建)
docker build -t my-demo .

//启动容器
docker run -d --name=my-demo-spring -p 9527:9527 my-demo

//查询启动日志
docker logs my-demo-spring

//访问
curl localhost:9527/hellodocker
"路人是妖怪"
  1. 镜像仓库
    官方的:hub.docker.com
    登录:docker login
    username:你申请的账号
    password:你的密码

    上传操作:
    必须将你的镜像改名为 “你docker账号的id”/镜像名 eg: neo0116/my-demo
    docker tag my-demo neo0116/my-demo
    删除原来的镜像
    docker rmi my-demo
    上传
    docker push neo0116/my-demo

    阿里镜像仓库:https://cr.console.aliyun.com/cn-shenzhen/instances

    先在阿里云上选择你仓库所在区域并创建命名空间

    登录:sudo docker login --username=648931255@qq.com registry.cn-shenzhen.aliyuncs.com
    password:密码

    上传操作:
    必须将你的镜像改名为:“区域地址” / “你阿里云的命名空间” / 镜像名
    eg:registry.cn-shenzhen.aliyuncs.com/aliyun_neo/my-demo
    docker tag my-demo registry.cn-shenzhen.aliyuncs.com/aliyun_neo/my-demo:v1.0
    删除原来的镜像
    docker rmi my-demo
    上传
    docker push registry.cn-shenzhen.aliyuncs.com/aliyun_neo/my-demo:v1.0

    拉取
    docker pull registry.cn-shenzhen.aliyuncs.com/aliyun_neo/my-demo:v1.0

    自建私服
    工具harbor:https://github.com/goharbor/harbor
    1、下载:https://github.com/goharbor/harbor/releases
    2、harbor要有docker-compose才能安装
    3、docker-compose安装

    //运行以下命令以下载Docker Compose的当前稳定版本
    sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-
    compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    
    //将可执行权限应用于二进制文件
    sudo chmod +x /usr/local/bin/docker-compose
    
    //测试安装
    docker-compose --version
    

    4、解压harbor.tar.gz
    5、修改harbor.cfg文件:
    主要是ip地址的修改成当前机器的ip地址
    同时也可以看到Harbor的密码,默认是Harbor12345
    6、安装:sh install.sh
    7、浏览器直接访问 你的IP地址默认80端口,账号admin 密码Harbor12345
    在这里插入图片描述
    8、登录:docker login --username=admin <harbor的IP地址>
    password:Harbor12345
    (如果报错:Error response from daemon: Get https://xxxx.xxx.xxx.xxx/v2/: dial tcp xxxx.xxx.xxx.xxx:443: connect: connection refused
    (1)find / -name docker.service -type f
    (2)在ExecStart 后 加上 --insecure-registry=你的ip
    (3)重启 systemctl daemon-reload systemctl restart docker
    9、上传操作:
    必须将你的镜像改名为:“你的项目名” / 镜像名
    eg:neo/my-demo
    docker tag my-demo neo/my-demo
    10、删除原来的镜像
    docker rmi my-demo
    11、上传
    docker push neo/my-demo

    12、拉取
    docker pull neo/my-demo

二、什么是Container

  1. run一个image生成一个container
    在这里插入图片描述
    加锁部分就是image,未上锁就是container,也就是基于layer由image创建出来并且可读写

  2. 由container生成一个定制化的image

//拉取centos
docker pull centos
//交互式生成容器
docker run -d -it --name=my-centos  centos
//进入容器
docker exec -it my-centos bash
//此时进入容器内部linux系统
sudo vim  (发现没有vim命令)
yum install vim -y (安装vim)
sudo vim  (已经有vim命令了)
exit
//回到主机上
//生成定制的image
docker commit my-centos  custom-centos
docker run -d -it --name=my-custom-centos  custom-centos
docker exec -it my-custom-centos bash
//进入容器的linux中
sudo vim (vim命令存在)

官方推荐使用Dockerfile生成image,出问题方便查询

  1. 容器指定占用资源
//--memory=500M限制最大内存500M
//--cpu-shares=10限制cpu最大权重10
docker run -d --name=tomcat01 --memory=500M --cpu-shares=10 -p 8080:8080 tomcat
  1. 底层技术
    docker基于linux kernel 的NameSpace 隔离进程/网络/挂载点,CGroups(controller groups)限制资源(cpu/memory),UnionFileSystem用来给image和container分层
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值