Docker学习记录

Docker是什么

像一种沙盒技术,封装一个系统环境,把需要运行的东西放在里面运行。这个系统环境因为基于linux的文件技术而变得很高效,类似于windows平台的vhd虚拟磁盘的“快照”技术,Docker的每次对环境的封装只需要保存不同于本地系统的“例外”即可,所以每个环境的“镜像”体积都变的尽可能地小(坏处就是不能跨平台)。以前使用软件前所对应的繁琐的“配置环境”工作只需要操作一次,然后用Docker封装起来,其他跟我操作系统内核一样的计算机需要用到这个软件时,只需要用docker去run我这个封装好的镜像就可以了,达到即食效果。

基础操作

docker search java		//搜索java镜像
docker pull 镜像名		//拉取镜像
docker run 镜像名 命令	//创建该镜像的容器并以这个新建容器的身份执行命令
docker run -it 镜像名		//启动镜像容器并保持shell接管
docker exect -it 容器名 /bin/bash		//进入容器并使当前shell接管容器的/bin/bash
docker ps 		//显示正在运行的容器,-a 显示所有容器
docker stop 容器名		//中止容器
docker start 容器名		//运行容器
docker rmi 镜像名		//删除镜像
docker rm 容器名		//删除容器

持久层

每次利用Docker虚拟镜像的容器随时面临停止,删除,甚至镜像被抛弃的命运。所以就需要在容器里配置一个或多个路径与宿主相通的、真实存在的、不会被还原的路径用来保存容器使用期间收获的数据,即持久层。

docker run -v /tmp/dockerTmp:/tmp - winggon/ubuntu

这时候宿主机tmp目录下会自创建一个dockerTmp文件夹,里面的信息即是容器里的/tmp文件夹,数据互通。(容器如果已经有该目录,容器该目录原数据不加载,所以容器对应路径不能乱填,通常填写一个不存在的路径为妙)

虚拟网关

通常情况下docker虚拟容器的时候还会分配一个ip地址给该容器,但是这个ip地址是随机的。显然不利于容器间通信。

// 创建一个名字叫mySuperNet的路由器,路由器的ip是172.10.0.1。掩码是24,即24/8=3个255,即日常可见的255.255.255.0。所以这个虚拟路由器能够分配172.10.0.1到172.10.0.255的ip地址。
docker network create --subnet 172.10.0.1/24 mySuperNet
// 查看刚刚是否新建成功
docker network ls 

以后构建容器的时候,加上

--net=mySuperNet  --name mySuperSql

即会把这个名字叫“mySuperSql”的新建容器放到这个路由器内,其他同样指向mySuperNet路由器的容器可以根据mySuperSql这个名字找到对应容器了
比如以前mysql.properties里面的
jdbc.url=jdbc:mysql://127.0.0.1:3306/
就可以改成
jdbc.url=jdbc:mysql://mySuperSql:3306/
或者进入该路由器管辖内的容器里面执行

ping mySuperSql		//如果容器里有ping工具的话

也可以验证mySuperSql这个名字能不能指向网络地址

端口映射

把本机(宿主)的端口映射到容器的端口,比如在docker run这个镜像的指令里面加上 -p 80:8080,这时候如果有人访问本机的80端口,本机会自动跳转访问容器的8080端口。

创建容器

docker pull 拉取镜像
docker run 即创建容器
-t 分配伪终端并绑定到容器的标准输入上。
-i 让容器标准输入保持打开
如果执行

docker run -it ubuntu /bin/bash

即创建ubuntu容器且容器会被当前界面的shell接管,我们可以慢慢操作容器。
就像在vmware打开了一个windows,可以用键盘鼠标慢慢操作这个系统
如果创建这个容器需要配置端口映射,指向网关,分配容器名字,构建持久层,还有设置密码,比如mysql 画风就是下面这样

docker run -p 3306:3306 --net=myNet --name mySuperSql \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-v /usr/local/docker/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql

印象如果没有配置-e密码是会创建失败的,或者说一创建就退出
如果忘记了-e后面的标记也没关系,创建失败会有提示,复制即可。

进入正在运行的容器

docker exec -it winggon/ubuntu /bin/bash

即可登录这个正在挂载的ubuntu系统里面去了。

封装镜像

把需要构建这个新镜像所需要的镜像源,需要加入的文件,操作的命令等等保存到当前目录下Dockerfile文件

$ cat Dockerfile
FROM hello-world:latest
ADD ...
COPY...
RUN...
CMD...

然后执行build即可

docker build  . -t winggon/helloworld:1.0.0

Docker-Compose

安装docker-compose,创建镜像

Docker-Compose是Docker的官方开源项目。下载地址

curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
// 安装完成后赋予权限
sudo chmod +x /usr/local/bin/docker-compose

docker-compose用于容器编排,预先准备好启动容器的列表和启动参数,然后一键完成启动。用以多容器操作时候解放劳动力。

docker-compose up

即调用当前目录下docker-compose.yml内容开始工作。
yml文件里可以对每个容器的构建设定参数,比如ports:设定端口映射,build加上Dockerfile即可创建新镜像。

intelliJ IDEA插件远程构建docker镜像

一、idea平台创建系统变量。

windows7-10:右键计算机属性>(高级计算机管理)>高级>环境变量>(用户变量)新建
变量名:DOCKER_HOST
变量值:tcp://服务器:2375

二、服务器开启Docker远程管理端口

vi /lib/systemd/system/docker.service
# 先备份原来的,再另起一行
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock -H tcp://0.0.0.0:7654
# 重新加载docker配置
systemctl daemon-reload // 1. 加载docker守护线程
systemctl restart docker // 2. 重启docker
netstat -an | grep 2375	//3. 检查是否已经开始监听

三、pom.xml附加依赖

<build>
	<plugins>
	    <!--新增的docker maven插件-->
	    <plugin>
	        <groupId>com.spotify</groupId>
	        <artifactId>dockerfile-maven-plugin</artifactId>
	        <version>1.4.0</version>
	        <configuration>
	            <!--  镜像名, 也可以使用${project.artifactId} -->
	            <repository>dockerspringboot</repository>
	            <buildArgs>
	                <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
	            </buildArgs>
	        </configuration>
	    </plugin>
	</plugins>
</build>

四、创建Dockerfile在pom.xml同级目录

FROM java:8
ARG JAR_FILE
ADD ${JAR_FILE} app.jar

ENTRYPOINT ["java","-jar","/app.jar"]
EXPOSE 8080

// 先package准备好胖包
Maven Projects -->Plugins–>dockerfile–>dockerfile:build

Docker社区?

把封装好的镜像共享以让更多的人免去配置环境的烦恼,同样自己也使用别人的成果,共同加快计算机发展。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值