docker

Docker介绍和使⽤场景

官⽹:https://www.docker.com/get-started

介绍

  • 百科:⼀个开源的应⽤容器引擎,让开发者可以打包他们 的应⽤以及依赖包到⼀个可移植的容器中,然后发布到 任何流⾏的 Linux 机器上,也可以实现虚拟化。

  • 容器是完全使⽤沙箱机制,相互之间不会有任何接⼝, 使⽤go语⾔编写,在LCX(linux容器)基础上进⾏的封 装

  • 简单来说:

    • 就是可以快速部署启动应⽤
    • 实现虚拟化,完整资源隔离 ⼀次编写,四处运⾏
    • 但有⼀定的限制,⽐如Docker是基于Linux 64bit 的,⽆法在32bit的linux/Windows/unix环境下使⽤

优点

  • 提供⼀次性的环境,假如需要安装Mysql,则需要安装 很多依赖库、版本等,如果使⽤Docker则通过镜像就 可以直接启动运⾏
  • 快速动态扩容,使⽤docker部署了⼀个应⽤,可以制作成镜像,然后通过Dokcer快速启动
  • 组建微服务架构,可以在⼀个机器上模拟出多个微服 务,启动多个应⽤
  • 更好的资源隔离和共享
  • 开箱即⽤,快速部署,可移植性强,环境隔离

Linux安装Docker

注意:

# docker 需要在centOS7-64位上安装
hostnamectl | grep -i kernel
hostnamectl
uname -srm
uname -a
# 检查 系统版本

yum安装

参考:https://blog.csdn.net/u014069688/article/details/100532774

# 更新yum源
yum update
# 安装epel源
yum install epel-release -y
# 清除yum缓存
yum clean all 
# 查看所有可安装的包(可不执行)
yum list
# 检查Linux上是否安装docker
yum list installed | grep docker
# 安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加(中央仓库)
yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo
# 查看docker版本
yum list docker-ce --showduplicates | sort -r
# 选择版本安装
yum install docker-ce-18.03.1.ce -y
# 启动
systemctl start docker
# 检查安装结果
docker info

# 启动使⽤Docker
systemctl start docker #运⾏Docker守护进程
systemctl stop docker #停⽌Docker守护进程
systemctl restart docker #重启Docker守护进程

centOS 7遇见问题

Error: Package: 3:docker-ce-19.03.13-3.el7.x86_64 (docker-ce-stable)
           Requires: libseccomp >= 2.3
           Installed: libseccomp-2.2.1-1.el7.x86_64 (@el7_yum)
               libseccomp = 2.2.1-1.el7
Error: Package: 3:docker-ce-19.03.13-3.el7.x86_64 (docker-ce-stable)
           Requires: container-selinux >= 2:2.74
Error: Package: containerd.io-1.3.7-3.1.el7.x86_64 (docker-ce-stable)
           Requires: container-selinux >= 2:2.74
# 解决
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum install epel-release -y
yum install container-selinux -y

阿里云安装文档:

https://help.aliyun.com/document_detail/51853.html?spm=a2c4g.11186623.6.820.RaToNY

离线安装(没测)

# wget下来 或其他方式
wget http://download.docker.com/linux/static/stable/x86_64/docker-19.03.9.tgz
# tar解压
tar -zxvf docker-18.06.3-ce.tgz -C ../services/
# 进入docker bin目录
cp docker/* /usr/bin/

在/etc/systemd/system/目录下新增docker.service文件,内容如下,这样可以将docker注册为service服务

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
  
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd --selinux-enabled=false --insecure-registry=127.0.0.1
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
  
[Install]
WantedBy=multi-user.target

此处的–insecure-registry=127.0.0.1(此处改成你私服ip)设置是针对有搭建了自己私服Harbor时允许docker进行不安全的访问,否则访问将会被拒绝。

# 给docker.service文件添加执行权限
chmod +x /etc/systemd/system/docker.service 
# 重新加载配置文件(每次有修改docker.service文件时都要重新加载下)
systemctl daemon-reload 
# 启动
systemctl start docker
# 设置开机启动
systemctl enable docker.service
# 查看docker服务状态
systemctl status docker
# active(running)成功

Dokcer基础知识

概念:

  • Docker 镜像 - Docker images:容器运⾏的只读模 板,操作系统+软件运⾏环境+⽤户程序

就像javabeen类

  • Docker 容器 - Docker containers:容器包含了某个应 ⽤运⾏所需要的全部环境

就像java new对象

  • Docker 仓库 - Docker registeries: ⽤来保存镜像,有 公有和私有仓库,好⽐Maven的中央仓库和本地私服

  • 总结 对⽐⾯向对象的⽅式

Dokcer ⾥⾯的镜像 : Java⾥⾯的类 Class

Docker ⾥⾯的容器 : Java⾥⾯的对象

Object 通过类创建对象,通过镜像创建容器

Docker容器常⻅命令

  • docker search [镜像名称] : 查看网上已有镜像

  • docker images:列出当前系统存在的镜像

  • docker pull [镜像名称] 拉取镜像网上镜像

镜像名称:(格式 REPOSITORY : TAG)

REPOSITORY:表示镜像的仓库源,

TAG:镜像的标签

  • 运⾏⼀个容器:
docker run --name nginx-xd -p 8080:80 -d nginx
# docker run  运⾏⼀个容器
# -d +后台运⾏
# -p +端⼝映射
# --name  +容器名称
  • docker ps : 列举当前运⾏的容器

  • docker inspect [容器名称] 检查容器内部信息

  • docker rmi [IMAGE_NAME] 删除镜像

强制移除镜像不管是否有容器使⽤该镜像 增加 -f 参数

  • docker stop [容器名称] 停⽌某个容器

  • docker start [容器名称] 启动某个容器

  • docker rm [容器名称] 移除某个容器 (容器必须是停⽌状 态)

  • docker ps -a 列举全部 容器

  • docker logs -f containerid 查看容器启动⽇志

Docker仓库的知识

Docker公有+阿里云私有镜像仓库

官⽅公共镜像仓库和私有镜像仓库(画图)

  • 公共镜像仓库:

官⽅:https://hub.docker.com/,基于各个软件开 发或者有软件提供商开发的

⾮官⽅:其他组织或者公司开发的镜像,供⼤家免 费试⽤

-私有镜像仓库:

⽤于存放公司内部的镜像,不提供给外部试⽤;

开通阿⾥云私有镜像仓库

登录阿⾥云账号访问地址:

https://cr.console.aliyun.com/ 
https://cr.console.aliyun.com/cn-shenzhen/instances/credentials 
  • 初次使⽤会提示开通

在这里插入图片描述

AlibabaCloud微服务本地镜像打包 配置讲解

微服务Docker镜像打包讲解

官⽅⽂档:https://spring.io/guides/gs/spring-boot-docker/

  • 父项目添加springboot版本属性
<properties>
    <springboot.version>2.3.3.RELEASE</springboot.version>
</properties>
  • 子项目添加镜像前缀
<properties>
    <docker.image.prefix>[自己定义]</docker.image.prefix>
</properties>
  • 子项目添加maven插件
<build>
    <finalName>[子项目名称]</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>

            <configuration>
                <fork>true</fork>
                <addResources>true</addResources>
            </configuration>
        </plugin>

        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>dockerfile-maven-plugin</artifactId>
            <version>1.4.10</version>
            <configuration>
                <repository>${docker.image.prefix}/${project.artifactId}</repository>
                <buildArgs>
                    <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                </buildArgs>
            </configuration>
        </plugin>
    </plugins>
</build>

<!-- 
${project.build.finalName} 产出物名称,缺省为
${project.artifactId}-${project.version} 
-->
  • 添加镜像打包脚本
# 创建Dockerfile,默认是根⽬录,(可以修改为src/main/docker/Dockerfile,如果修则需要制定路径)
# Dockerfile是由⼀系列命令和参数构成的脚本,这些命令应⽤于基础镜像, 最终创建⼀个新的镜像
# [内容]:
FROM adoptopenjdk/openjdk8:ubi
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

# [讲解]:

# FROM <image>:<tag> 需要⼀个基础镜像,可以是公共的或者是私有的,
# 后续构建会基于此镜像,如果同⼀个Dockerfile中建⽴多个镜像时,可以使⽤多个FROM指令

# VOLUME 配置⼀个具有持久化功能的⽬录,
# 主机/var/lib/docker ⽬录下创建了⼀个临时⽂件,
# 并链接到容器的/tmp。改步骤是可选的,如果涉及到⽂件系统的应⽤就很有必要了。
# /tmp⽬录⽤来持久化到 Docker 数据⽂件夹,
# 因为Spring Boot 使⽤的内嵌 Tomcat 容器默认使⽤/tmp作为⼯作⽬录

# ARG 设置编译镜像时加⼊的参数, JAR_FILE 是设置容器的环境变量(maven⾥⾯配置的)

# COPY : 只⽀持将本地⽂件复制到容器 ,还有个ADD更强⼤但复杂点

# ENTRYPOINT 容器启动时执⾏的命令
# EXPOSE 8080 暴露镜像端⼝
  • 构建镜像( 去到⼦模块pom⽂件下)
mvn install -Dmaven.test.skip=true
dockerfile:build
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值