Docker学习笔记

一、初识Docker

1、部署问题

        大型项目组件较多,运行环境较为复杂,部署时会碰到一些问题:

                依赖关系复杂,容易出现兼容性问题。

                开发、测试、生产环境有差异。

2、docker的解决方式

        对于依赖问题的解决方式:将应用的libs(函数库)、deps(依赖)、配置与应用一起打包

                                                    将每个应用放到一个隔离容器去运行,避免相互干扰。

        对于操作环境的解决方式:将用户程序与所需要调用的系统函数库一起打包。

                                                    运行到不同操作系统时,直接基于打包的函数库,借助于操作系  

                                                    统的Linux内核来运行。

3、Docker架构      

        镜像(image):Docker将应用程序及其所需要的依赖、函数库、环境、配置等文件打包在一起。

        容器(container):镜像中的应用程序运行后形成的进程就是容器。Docker会给容器做隔离,对外不可见。

        DockerHub:是一个Docker镜像的托管平台。

        Docker是一个CS架构程序。组成:服务端、客户端

                服务端:Dockers守护进程,负责处理Docker指令,管理镜像、容器等。

                客户端:通过命令或RestAPI向Docker服务端发送指令。可以在本地或者远程发送。

4、Docker安装,基于CentOS7

        安装yum工具

yum install -y yum-utils\
> device-mapper-persistent-data \
> lvm2 --skip-broken

        更新本地镜像源

yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo

yum makecache fast

        安装命令

yum install -y docker-ce

5、启动Docker

       关闭防火墙(实际开发环境不能关闭),此处是为了方便启动

systemctl stop firewalld

        启动命令

systemctl start docker #启动
systemctl stop docker #停止
systemctl restart docker #重启

docker -v #查看版本

        

6、镜像加速

        使用国内的比使用国外的快。     

阿里云配置文档地址:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

二、Docker基本操作

1、镜像相关命令

        镜像名称组成:[repository]:[tag]。第一个名字、第二个版本号

       

拉取具体操作:1、在镜像仓库搜索需要的镜像(DockerHub)

                         2、通过命令拉取,docker pull nginx

                         3、查看已经拉取的镜像,docker images

        

2、容器相关命令

        

 案例:

a、运行一个nginx容器

       去docker hub查看nginx的容器命令

       命令:docker run --name thissname -p 80:80 -d nginx

               解释:docker run:创建并运行一个容器

                          --name:给容器起一个名字

                          -p:将宿主机端口与容器端口映射,左侧宿主端口,右侧容器端口

                          -d:后台运行

                          nginx:镜像名称。

b、进入Nginx容器,修改HTML内容

        1、进入容器。

              命令:docker exec -it thissname bash

              解释:docker exec:进入容器内部,执行命令

                         -it:给当前进入的容器创建一个标准输输出终端,允许我们与容器交互

                        thissname:容器名称

                        bash:进入容器后执行的命令,此命令是Linux终端交互命令

        2、进入对应html路径

             命令:cd /usr/share/nginx/html

        3、修改内容

              命令:sed -i 's#Welcome#this shit#g' index.html

三、数据卷

1、概念

       容器与数据耦合问题

                1、不便于修改:当我们修改文件时需要进入容器内部。

                2、数据不可复用:在容器内部的修改对外部不可见,对新建的容器也不可用

                3、升级维护难: 数据在容器内,如果要升级容器必然删除旧容器。

        数据卷是一个虚拟目录,指向宿主文件系统中的某个目录。作用:创建数据卷后,宿主中对应的文件和容器中对应的文件就相互关联起来了,数据就同步了。

2、实操

       操作命令:

        1、docker volume [command] 此命令是数据卷操作,命令中的command是确认下一步。

                        create:创建一个volume

                        inspect:显示一个或多个volume的信息

                        ls:显示所有volume

                        prune:删除未使用的volume             

          2、-v 挂载数据卷              

                语法:-v [宿主目录] :[容器内目录]

                           -v [宿主文件]:[容器内文件]

               命令:docker run --name thissname -p 80:80 -v html:/root/html -d nginx

               解释:docker run:创建并运行一个容器

                          --name:给容器起一个名字

                          -v:把html数据卷挂在到容器内的/root/html这个目录

                          -p:将宿主机端口与容器端口映射,左侧宿主端口,右侧容器端口

                          -d:后台运行

                          nginx:镜像名称。

案例:在宿主机修改容器内部的html文件

        1、启动容器,并挂在对应文件。

                docker run --name thissname -p 80:80 -v html:/usr/share/nginx/html  -d nginx

        2、查看宿主机对应文件

                docker inspect html

                解释:html为数据卷名称

        3、进入目录修改

四、自定义镜像

1、镜像结构       

        基础镜像(BaseImage):应用依赖的系统函数库、环境、配置、文件等。

        层(layer):在BaseImage基础上添加安装包、依赖、配置等。

        入口(Entrypoint):镜像运行入口。

2、DockerFile

        一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。每个指令都会形成一层Layer。       

3、部署java项目

        1、上传文件

                项目jar包、jdk压缩包、DockerFile配置文件。               

# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量
ENV JAVA_DIR=/usr/local

# 拷贝jdk和jar包
copy ./jdk8.tar.gz $JAVA_DIR/
copy ./eureka-server-1.0-SNAPSHOT.jar /tmp/eureka.jar

# 安装JDK
# jdk1.8.0_162:jdk解压后的文件名
RUN cd $JAVA_DIR && tar -xf ./jdk8.tar.gz && mv ./jdk1.8.0_162 ./java8

# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin

# 暴露接口
EXPOSE 8001

# 入口启动命令
ENTRYPOINT java -jar /tmp/eureka.jar

        2、 构建

                命令:docker build -t javaweb:1.0 .

                -t:等于-tag

                javaweb:1.0 :名字加版本

                .:目录,点表示当前目录

        3、启动

                docker run --name java -p 8001:8001 -d javaweb:1.0

五、DockerCompose

1、DockerCompose

        基于Compose文件,我们可以快速部署分布式应用,无需一个个手动创建。

        Compose文件是一个文本文件,通过指令定义集群中的每一个容器运行。

        官网:https://docs.docker.com/compose/compose-file

2、安装

        下载对应dockerCompose文件。      

sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

        给文件增加执行权

chmod +x docker-compose 

3、使用

        1、准备配置文件docker-compose.yml       

version: "3.3"

services:
 eureka:
   build: ./eureka
   ports:
    - "8001:8001"
 user:
   build: ./user
 order:
   build: ./order
 gateway:
   build: ./gateway
   ports:
    - "8004:8004"

        

        2、将项目配置文件中的地址改为dockercompose配置文件中的服务名

        

        

        3、上传文件,执行启动命令       

docker-compose up

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值