Docker - 镜像与容器

本文详细介绍了Docker镜像的构建与管理,包括Dockerfile语法、镜像仓库的使用、镜像与容器的基本操作,以及如何通过Docker实现SpringBoot项目的部署。

一、镜像

Docker官方镜像

Dockerfile常见语法

  1. FROM:指定基础镜像,比如FROM ubuntu:14.04
FROM ubuntu:14.04
  1. RUN:在镜像内部执行一些命令,比如安装软件,配置环境等,换行可以使用""
RUN groupadd -r mysql && useradd -r -g mysql mysql
  1. ENV:设置变量的值,ENV MYSQL_MAJOR 5.7,可以通过docker run --e key=value修改,后面可以直接使用${MYSQL_MAJOR}
ENV MYSQL_MAJOR 5.7
  1. LABEL:设置镜像标签
LABEL email="itcrazy2016@163.com" 
LABEL name="itcrazy2016"
  1. VOLUME:指定数据的挂在目录
VOLUME /var/lib/mysql
  1. 将主机的文件复制到镜像内,如果目录不存在,会自动创建所需要的目录,注意只是复制,不会提取和解压
COPY docker-entrypoint.sh /usr/local/bin/
  1. ADD:将主机的文件复制到镜像内,和COPY类似,只是ADD会对压缩文件提取和解压
ADD application.yml /etc/itcrazy2016/
  1. WORKDIR:指定镜像的工作目录,之后的命令都是基于此目录工作,若不存在则创建
WORKDIR /usr/local 
WORKDIR tomcat 
RUN touch test.txt

会在/usr/local/tomcat下创建test.txt文件

WORKDIR /root 
ADD app.yml test/

会在/root/test下多出一个app.yml文件

  1. CMD:容器启动的时候默认会执行的命令,若有多个CMD命令,则最后一个生效
CMD ["mysqld"] 或CMD mysqld
  1. ENTRYPOINT:和CMD的使用类似
ENTRYPOINT ["docker-entrypoint.sh"]

和CMD不同的是,docker run执行时,会覆盖CMD的命令,而ENTRYPOINT不会
11. EXPOSE:指定镜像要暴露的端口,启动镜像时,可以使用-p将该端口映射给宿主机

Dockerfile实战Spring Boot项目

  1. 创建一个spring boot项目
  2. 写一个controller
@RestController 
public class DockerController { 
	@GetMapping("/dockerfile") 
	String dockerfile() { 
		return "hello docker" ; 
	} 
}
  1. mvn clean package打成一个jar包。在target下找到"dockerfile-demo-0.0.1-SNAPSHOT.jar"
  2. 在docker环境中新建一个目录"first-dockerfile"
  3. 上传"dockerfile-demo-0.0.1-SNAPSHOT.jar"到该目录下,并且在此目录创建Dockerfile
  4. 创建Dockerfile文件,编写内容
FROM openjdk:8 
MAINTAINER itcrazy2016 
LABEL name="dockerfile-demo" version="1.0" author="itcrazy2016" 
COPY dockerfile-demo-0.0.1-SNAPSHOT.jar dockerfile-image.jar 
CMD ["java","-jar","dockerfile-image.jar"]
  1. 基于Dockerfile构建镜像
docker build -t test-docker-image .
  1. 基于image创建container
docker run -d --name user01 -p 6666:8080 test-docker-image
  1. 查看启动日志docker logs user01
  2. 宿主机上访问curl localhost:6666/dockerfile

镜像仓库

Docker hub: https://hub.docker.com/
(1) 在docker机器上登录
	docker login
	
(2)输入用户名和密码

(3)docker push xxxx/test-docker-image 
[注意镜像名称要和docker id一致,不然push不成功]

(4)给image重命名,并删除掉原来的
	docker tag test-docker-image xxxx/test-docker-image
	docker rmi -f test-docker-image

(5)再次推送,刷新hub.docker.com后台,发现成功

(6)别人下载,并且运行
	docker pull ixxxx/test-docker-image
	docker run -d --name user01 -p 6661:8080 xxxx/test-docker-image
阿里云docker hub

阿里云docker仓库
https://cr.console.aliyun.com/cn-hangzhou/instances/repositories

参考手册
https://cr.console.aliyun.com/repository/cn-hangzhou/dreamit/image-repo/details

(1)登录到阿里云docker仓库
	sudo docker login --username=xxxx registry.cn- hangzhou.aliyuncs.com
(2)输入密码

(3)创建命名空间,比如xxxx

(4)给image打tag
	sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/xxxx/test- docker-image:v1.0

(5)推送镜像到docker阿里云仓库
	sudo docker push registry.cn-hangzhou.aliyuncs.com/xxxx/test-docker- image:v1.0

(6)别人下载,并且运行
	docker pull registry.cn-hangzhou.aliyuncs.com/xxxx/test-docker- image:v1.0
	docker run -d --name user01 -p 6661:8080 registry.cn- hangzhou.aliyuncs.com/xxxx/test-docker-image:v1.0
搭建自己的Docker Harbor

(1)访问github上的harbor项目 Harbor

(2)下载版本,比如1.7.1

(3)找一台安装了docker-compose的虚拟机,上传并解压

tar -zxvf xxx.tar.gz

(4)进入到harbor目录,修改harbor.cfg文件,主要是ip地址的修改成当前机器的ip地址 同时也可以看到Harbor的密码,默认是Harbor12345

(5)安装harbor,需要一些时间。

sh install.sh

(6)浏览器访问,比如39.100.39.61,输入用户名和密码即可

Image的常见操作

(1)查看本地image列表

docker images 
docker image ls

(2)获取远端镜像

docker pull

(3)删除镜像[注意此镜像如果正在使用,或者有关联的镜像,则需要先处理完]

docker image rm imageid 
docker rmi -f imageid 
docker rmi -f $(docker image ls) 删除所有镜像

(4)运行镜像

docker run image

(5)发布镜像

docker push

容器(Container)

container常见操作

(1)根据镜像创建容器

docker run -d --name -p 9090:8080 my-tomcat tomcat

(2)查看运行中的container

docker ps
docker ps -a  查看所有的container[包含退出的]

(4)删除container

docker rm containerid 
docker rm -f $(docker ps -a) 删除所有container

(5)进入到一个container中

docker exec -it container bash

(6)查看某个container的日志

docker logs container

(7)查看容器资源使用情况

docker stats

(8)查看容器详情信息

docker inspect container

(9)停止/启动容器

docker stop/start container

(10)内存限制

--memory Memory limit
如果不设置 --memory-swap,其大小和memory一样
docker run -d --memory 100M --name tomcat1 tomcat

(11)CPU限制

--cpu-shares 权重 
docker run -d --cpu-shares 10 --name tomcat2 tomcat

图形化资源监控

https://github.com/weaveworks/scope

sudo curl -L git.io/scope -o /usr/local/bin/scope 
sudo chmod a+x /usr/local/bin/scope 
scope launch 39.100.39.63

停止scope
scope stop
同时监控两台机器,在两台机器中分别执行如下命令
scope launch ip1 ip2

在这里插入图片描述

内容概要:本文介绍了一项创新性未发表的研究,即利用多元宇宙优化算法(Multiverse Optimizer, MVO)对分时电价下的需求响应综合能源系统调度问题进行建模求解,旨在实现能源系统的经济性、高效性可持续性运行。该研究构建了包含多种能源设备(如光伏、风机、燃气轮机、储能系统等)及可调节负荷的综合能源系统模型,充分考虑了用户侧的需求响应行为在分时电价机制下的响应特性,通过MVO算法对系统运行成本、能源利用率、碳排放等多目标进行协同优化,实现了日前调度计划的智能决策。研究还提供了完整的MATLAB代码实现,便于研究人员复现实验、验证算法性能,并为进一步研究提供可靠的仿真基础。; 适合人群:具备一定电力系统、优化算法及MATLAB编程基础的科研人员、研究生以及从事能源互联网、综合能源系统规划运行的技术工程师。; 使用场景及目标:① 学习并掌握多元宇宙优化算法在复杂能源系统调度中的具体应用方法;② 研究分时电价机制如何通过需求响应引导用户参电网互动,实现削峰填谷;③ 实现综合能源系统(IES)中冷、热、电、气等多种能源的协同优化调度,以降低运行成本、提高新能源消纳能力和系统可靠性;④ 为相关领域的学术研究提供可复现的代码实例和仿真平台。; 阅读建议:此资源以MATLAB代码为核心载体,深入剖析了算法应用系统建模的全过程。建议读者在学习时,不仅应关注代码的实现细节,更要理解其背后的数学模型、优化目标设定和约束条件的物理意义。建议结合文档中的模型描述,逐步调试代码,观察不同参数和场景下的优化结果,从而深刻掌握综合能源系统优化调度的设计思想关键技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无法无天过路客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值