docker基础
docker是开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的[Linux]机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
相关的核心技术
cggroups:
LXC:
AUFS:
安装docker(centos7)
先暂时把防火墙关了,不然一会儿可能启动不了容器或者访问不了
systectl stop firewalld
相关依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
添加稳定版仓库
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安装docker-ce docker-ce社区版免费/docker-ee企业版收费
yum install docker-ce
相关命令
systemctl start/stop/status docker 启动/状态/停止
service docker start/stop/status/restart
docker version 版本
#卸载
yum remove docker
rm -rf /var/lib/docker
为docker添加国内镜像,下载仓库的镜像更快
阿里云有免费的
安装完成,启动docker
docker image
docker image是一个极度精简版的Linux程序运行环境,可以独立运行,共享主机的内存和磁盘等资源,但是内部文件是沙箱环境,和外部安全隔离,占得资源少,启动快,根据镜像可以快速创建环境一致的容器,可以快速大规模部署
相关命令
docker pull 镜像地址:版本号 #不写默认会拉取最新版本号
docker save -o 目标文件 镜像:版本 #导出镜像
docker load -i 镜像 #导入镜像
docker rmi 镜像 #删除镜像
docker images #查询image
docker inspect 镜像 #查看文件细节
docker tag IMAGEID(镜像id) REPOSITORY:TAG(仓库:标签)
docker build -t 镜像名称:版本号 #根据dockerfile 创建镜像
docker create -d --name 容器名 :创建容器三是不运行
docker run -d --name 容器名 镜像名:版本号 #创建并运行容器
docker run -d --name 容器名(自定) 镜像id号
docker run -d -p 虚拟机端口:镜像端口 --name 容器名 镜像名:版本号
docker ps #查看活动的容器
Docker ps -a/-all #查看全部容器
docker exec -it 容器id/name bash #进入容器
docker stop 容器Id号/name #关闭容器
docker start 容器Id号/name #启动容器
docker rm 容器Id号/name #删除容器
#关闭并删除所有容器
docker stop $(docker ps -q) & docker rm $(docker ps -aq)
案例
docker pull redis #下载redis镜像
docker pull tomcat:8 #下载tomcat镜像
docker pull mysql:5.7 #下载mysql镜像
docker images
docker run -d --name redis7000 -p 7000:6379 redis
-d:容器将以后台模式运行
--name:容器名称
redis:镜像名称
-p: 暴露端口,访问外部虚拟机的7000端口会映射到镜像的6379端口(redis默认6379)
docker ps -a
测试(systemctl stop firewalld 暂时关闭防火墙)
public class JedisTest {
public static void main(String[] args) {
Jedis jedis = new Jedis("192.168.116.150",7000);
jedis.set("cai","li ke li");
System.out.printf("redis:"+jedis.get("cai"));
}
}
docker stats #查看镜像的内存,可以看出占得资源非常少
创建自定义网络
docker network create --subnet=172.18.0.0/24 dockernet
docketnet :自定义网络的名称
docker network ls #查看网络,默认有三个,容器不指定默认是桥接
安装虚拟机,桥接模式虚拟机就会分配一个ip给操作系统
同理,docker也可以类似虚拟化一个局域网,上面就创建了一个dockernet网络.容器之间可以在虚拟网络上进行交互,
创建mysql
docker run --net dockernet --ip 172.18.0.11 --name=mysql-11 -it -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7 --character-set-server=utf8
--net:选择网路
--ip: 分配给mysql的ip地址
--name: 镜像名字
-i:interactive具有交互功能
-t:提供伪终端
-d: 后台运行
-p:暴露的端口
-e MYSQL_ROOT_PASSWORD=root :给root用户的初始密码
--character-set-server=utf8:字符
mysql:5.7:镜像名称
外部访问mysql就用暴露的端口,容器之间用内网交互
新建mysql 容器
docker run -itd -p 8080:8080 --net dockernet --ip 172.18.0.12 --name tomcat-12 tomcat:8 /bin/bash
/bin/bash :进入容器内部使用bash脚本语言,就是一般的shell命令
新建一个简单的ssm项目,访问我们上面的数据库 地址在文章末尾
里面有条记录 是个图片标签
打包我们的ssm项目,改名为ROOT.war
进入mysql容器里面看看目录
exit 退出容器
docker exec -it tomcat-12 /bin/bash
可以看到webapps的目录在 /usr/local/tomcat 下.删除里面的ROOT文件
上传打包的ssm的ROOT.war包到--虚拟机--的/usr/local/src目录下
把文件拷贝的容器内部
cd /usr/local/src
docker ps ROOT.war tomcat-12:/usr/local/tomcat/webapps/
访问刚刚部署的项目(没起来可以把容器重启.会自动解压)
显示是图片是因为window配了nginx
dockerfile制作镜像
上面只是简单的入门,dockerfile自动化构建才是核心,dockerfile是个--脚本,指定镜像包含的软件,通过dockefile可以制作一个包含了上面三个软件的--镜像,并根据此镜像创建一致的--容器
关键字(不区分大小写,建议大写,)
FROM : 指定镜像来源
MAINTAINER:作者
ADD:复制文件,会自动解压 ,支持网络url
WORKDIR:设置当前工作目录
VOLUME:设置数据卷,挂载主机目录
EXPOSE:指定对外暴露的端口
RUN:执行命令 sh
CMD:执行命令exec 一个dockerfile只能有一个
COPY: 复制文件
ENV: 设置环境
ENTRYPOINT:环境
在某个目录下新建一个dockerfile文件
cd /usr/local/src/docker/
vim Dockerfile
添加相关的文件
#基础镜像
FROM centos:7
#配置jdk环境
ADD jdk-8u51-linux-x64.tar.gz /usr/local/src #后面的表示容器内的路径,下同
ENV JAVA_HOME=/usr/local/src/jdk1.8.0_51
ENV PATH=$JAVA_HOME/bin:$PATH
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.ja
#tomcat环境
ADD apache-tomcat-8.5.38.tar.gz /usr/local/src
ENV CATALINA_HOME /usr/local/src/apache-tomcat-8.5.38
ENV PATH=$PATH:$CATALINA_HOME/bin
#添加项目
WORKDIR $CATALINA_HOME/webapps
RUN mkdir docker
COPY ROOT.war $CATALINA_HOME/webapps/docker/ROOT.war
WORKDIR $CATALINA_HOME/webapps/docker
RUN jar xvf ROOT.war && rm ROOT.war
#暴露端口
EXPOSE 8080
#执行命令.启动tomcat
CMD ["/usr/local/src/apache-tomcat-8.5.38/bin/catalina.sh","run"]
创建镜像
docker build -t file:1 -f Dockerfile /usr/local/src/docker #镜像名:版本号
根据镜像创建容器
docker run -tid --name=tom -p 8090:8080 file:1
可以进入容器查看目录
docker exec -it tom /bin/bash
我们据此可以上传自己的镜像到仓库.并在任意一个docker程序内创建容器
和java一样.一处构建,到处运行
入门结束了,容器编排,持续集成,高级部分之后在学
总结;
docker :镜像.容器.dockrfile的基本操作
hithub地址:https://github.com/cailonghao/zongjie