总结-docker入门

2019-03-15  本文已影响0人  xc2023

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添加国内镜像,下载仓库的镜像更快
阿里云有免费的


dock1.png

安装完成,启动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
dock2.png
docker run -d --name redis7000 -p 7000:6379 redis

-d:容器将以后台模式运行
--name:容器名称
redis:镜像名称
-p: 暴露端口,访问外部虚拟机的7000端口会映射到镜像的6379端口(redis默认6379)

image.png
docker ps -a
dock3.png

测试(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"));
    }
}
dock4.png
docker stats #查看镜像的内存,可以看出占得资源非常少
dock5.png

创建自定义网络

docker network create --subnet=172.18.0.0/24 dockernet

docketnet :自定义网络的名称

docker network ls #查看网络,默认有三个,容器不指定默认是桥接

安装虚拟机,桥接模式虚拟机就会分配一个ip给操作系统
同理,docker也可以类似虚拟化一个局域网,上面就创建了一个dockernet网络.容器之间可以在虚拟网络上进行交互,


image.png

创建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就用暴露的端口,容器之间用内网交互


dock6.png

新建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项目,访问我们上面的数据库 地址在文章末尾


dock7.png
dock8.png

里面有条记录 是个图片标签
打包我们的ssm项目,改名为ROOT.war
进入mysql容器里面看看目录
exit 退出容器

docker exec -it tomcat-12 /bin/bash
dock9.png

可以看到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/
dock10.png

访问刚刚部署的项目(没起来可以把容器重启.会自动解压)


dock12.png
dock11.png

显示是图片是因为window配了nginx


dock13.png

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

添加相关的文件


dcok19.png
#基础镜像 
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 #镜像名:版本号
dock14.png

根据镜像创建容器

docker run -tid --name=tom -p 8090:8080 file:1 
dock16.png
dock17.png

可以进入容器查看目录

docker exec -it tom /bin/bash
dock18.png
我们据此可以上传自己的镜像到仓库.并在任意一个docker程序内创建容器
和java一样.一处构建,到处运行
入门结束了,容器编排,持续集成,高级部分之后在学
总结;
docker :镜像.容器.dockrfile的基本操作
hithub地址:https://github.com/cailonghao/zongjie
上一篇下一篇

猜你喜欢

热点阅读