Docker学习日记

Docker

一、Docker简介
1.1.虚拟化

​ 在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部份是不受现有资源的架设方式,地域或物理组态所限制。一般所指的虚拟化资源包括计算能力和资料存储。

​ 在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化的利用物理硬件 对资源充分利用

​ 虚拟化技术种类很多,例如:软件虚拟化、硬件虚拟化、内存虚拟化、网络虚拟化(vip)、桌面虚拟化、服务虚拟化、虚拟机等等。

1.2.虚拟化种类

​ 虚拟化的分类介绍可以看看这个博客:

https://blog.csdn.net/mumuriyue/article/details/85714900
1.3.Docker-容器虚拟化

​ Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口

1.4.Docker组件

​ 1.4.1.Docker客户端和服务器

​ Docker是一个客户端-服务器(C/S)架构程序。Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。Docker提供了一个命令行工具Docker以及一整套RESTful API。你可以在同一台宿主机上运行Docker守护进程和客户端,也可以从本地的Docker客户端连接到运行在另一台宿主机上的远程Docker守护进程。

​ 1.4.2.Docker镜像

​ 镜像是构建Docker的基石。用户基于镜像来运行自己的容器。镜像也是Docker生命周期中的“构建”部分。镜像是基于联合文件系统的一种层式结构,由一系列指令一步一步构建出来

​ Docker镜像是由文件系统叠加而成(是一种文件的存储形式)。最底端是一个文件引导系统,即bootfs,这很像典型的Linux/Unix的引导文件系统。Docker用户几乎永远不会和引导系统有什么交互。实际上,当一个容器启动后,它将会被移动到内存中,而引导文件系统则会被卸载,以留出更多的内存供磁盘镜像使用。Docker容器启动是需要的一些文件,而这些文件就可以称为Docker镜像

​ 1.4.3.Registry----注册中心

​ Docker用Registry来保存用户构建的镜像。Registry分为公共和私有两种。Docker公司运营公共的Registry叫做Docker Hub。用户可以在Docker Hub注册账号,分享并保存自己的镜像(说明:在Docker Hub下载镜像巨慢,可以自己构建私有(Registry)。

​ 1.4.4.Docker容器

​ Docker可以帮助你构建和部署容器,你只需要把自己的应用程序或者服务打包放进容器即可。

​ Docker就是一个镜像格式,一些列标准操作,一个执行环境。

二、Docker镜像基本操作
安装Docker
yum install docker
查看Docker版本
docker version
启动Docker
systemctl start docker
开机启动Docker
systemctl enable docker
停止Docker
systemctl stop docker
重启Docker
systemctl restart docker
查看Docker状态
systemctl status docker
查看Docker概要信息
docker info
查看docker帮助文档
docker --help
列出docker的所有镜像
docker images

查询表头详细信息:
	REPOSITORY:镜像所在的仓库名称
	TAG:镜像标签
	IMAGE ID:镜像ID
	CREATED:镜像的创建日期(不是获取该镜像的日期)
	SIZE:镜像大小
	这些镜像都是存储在Docker宿主机的/var/lib/docker目录下
搜索镜像
docker search 镜像名称

查询表的详细信息:
	NAME:仓库名称
	DESCRIPTION:镜像描述
	STARS:用户评价,反应一个镜像的受欢迎程度
	OFFICIAL:是否官方
AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的63.4拉取镜像

拉取镜像
docker pull 镜像名称
删除镜像
docker rmi 镜像id  删除指定镜像
dicker rmi 'docker images -q' 删除所有镜像
三、容器基本操作
查看容器
查看正在运行容器:docker ps
查看所有容器(高版本才能用,有的版本不能用):docker ps -a
查看最后一次运行的容器:docker ps –l
查看停止的容器:docker ps -f status=exited
创建预启动容器
创建容器:docker run
例如:docker run -it --name=mycentos centos:7 /bin/bash  创建一个交互式容器并取名为mycentos
	docker run -di --name=mycentos2 centos:7 创建一个交互式容器并取名为mycentos2
退出当前容器:exit

-i:表示运行容器

-t:表示容器启动后会进入容器命令行(交互式)。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。

--name :为创建的容器命名。

-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。

-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。

-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射

停止容器
docker stop 容器名
启动已运行过的容器
docker start 容器名
文件拷贝
docker cp 
目录挂载
docker run -di -v 宿主机目录:容器目录 --name=mycentos2 centos:7
查看容器信息
docker inspect 容器名称
查看容器的ip
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名
删除容器
docker rm $CONTAINER_ID/NAME
删除只能删除停止的容器
四、部署项目练习
4.1.MySql部署
1.进入MySql:docker exec -it pethome_mysql /bin/bash
2.登录MySql:mysql -uroot -p123456
3.开启远程访问:GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456';
flush privileges;
4.2.redis部署
docker run -di --name pethome_redis  redis --requirepass "123456"

–requirepass “123456” 设置密码为:123456

4.3.Dockerfile构建

4.2.1.Dockerfile简介:

​ Dockerfile是由一系列的命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像、

​ 优点:回溯性强 可移植性强

​ 基础命令图示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dnOwz4b3-1600850327502)(C:\Users\75851\AppData\Roaming\Typora\typora-user-images\image-20200923161054431.png)]

4.1.2. 实战-docker1.8镜像制造

Dockerfile:

FROM centos:7
MAINTAINER kgtest
WORKDIR /usr
RUN mkdir /usr/local/java
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/bin/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH

打包镜像:

docker build -t="jdk1.8" ./

创建容器:

docker run -di --name=jdk1.8 jdk1.8

进入容器检查

docker exec -it jdk1.8 /bin/bash
java -version
4.3.maven插件构建镜像

maven构建镜像需要docker开启远程支持

vi /lib/systemd/system/docker.service 

在‘ExecStart= ...’下面添加:
-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock 

刷新配置,重启docker

systemctl daemon-reload 
systemctl restart docker 

pom.xml添加dock儿插件

<build>
    <finalName>pethome</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
        <!--docker的maven插件,官网: https://github.com/spotify/docker‐maven‐plugin-->
        <plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>0.4.13</version>
    <configuration>
        <!--镜像名 PetHome:1.0-->
        <imageName>${project.artifactId}:${project.version}</imageName>
        <!--基础镜像-->
        <baseImage>jdk1.8</baseImage>
        <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
        <resources>
            <resource>
                <targetPath>/</targetPath>
                <directory>${project.build.directory}
                </directory>
                <include>${project.build.finalName}.jar</include>
            </resource>
        </resources>
        <!--docker远程主机-->
        <dockerHost>http://ip:2375</dockerHost>
    </configuration>
</plugin>
    </plugins>
</build>

打包项目:

mvn clean package -Dmaven.test.skip=true docker:build

注意:项目名 artifactId不能大写,否则不认识

基于镜像运行容器

docker run -id --name=pethome -p 8080:8080 --link pethome_redis:pethome_redis --link pethome_mysql:pethome_mysql pethome:1.0-SNAPSHOT
4.4.前台部署

4.4.1.前端打包

​ 前端打包的后缀必须是.tar.gz

4.4.2.编写Dockerfile脚本

FROM nginx:1.15
RUN mkdir /usr/share/nginx/pethome_admin
RUN mkdir /usr/share/nginx/pethome_front
ADD ./pethome_admin.tar.gz /usr/share/nginx/pethome_admin
ADD ./pethome_front.tar.gz /usr/share/nginx/pethome_front
ADD ./nginx.conf /etc/nginx/conf.d/
WORKDIR /usr/share/nginx
RUN chmod -R a+rx * pethome_admin
RUN chmod -R a+rx * pethome_front 

4.4.3.编写Nginx的配置文件

​ 编写nginx.conf,配置三个虚拟主机,2个前端的主机需要执行Dockerfile中指定的站点目录。

4.4.3.创建容器

docker run -di --name=pethome_web -p 80:80 --link pethome:pethome_service pethome-nginx

4.4.4.FastDfs部署

https://blog.csdn.net/tttzzztttzzz/article/details/86709318 简单使用

https://blog.csdn.net/u013457145/article/details/106017014 支持缩放

RUN chmod -R a+rx * pethome_front


4.4.3.编写Nginx的配置文件

​	编写nginx.conf,配置三个虚拟主机,2个前端的主机需要执行Dockerfile中指定的站点目录。

4.4.3.创建容器

docker run -di --name=pethome_web -p 80:80 --link pethome:pethome_service pethome-nginx


4.4.4.FastDfs部署

https://blog.csdn.net/tttzzztttzzz/article/details/86709318 简单使用

https://blog.csdn.net/u013457145/article/details/106017014 支持缩放

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值