当前位置:   article > 正文

Docker介绍及应用_docker应用

docker应用

一、Docker

Docker是基于Go语言实现的云开源项目,诞生于2013年初,最初发起者是dotClouw公司。Docker 自开源后受到广泛的关注和讨论,目前已有多个相关项目,逐断形成了围Docker的生态体系。dotCloud 公司后来也改名为Docker Ine。Docker是一个开源的容器引擎,它有助于更快地交付应用。 Docker可将应用程序和基础设施层隔离,并且能将基础设施当作程序一样进行管理。使用 Docker可更快地打包、测试以及部署应用程序,并可以缩短从编写到部署运行代码的周期。

二、Docker架构

在这里插入图片描述

  1. 客户端→Docker_Host(宿主机)→仓库
  2. 容器→镜像→仓库

镜像:简单理解为就是一个安装包,里面包含容器所需要运行的的基础文件和配置信息,比如:redis镜像、mysql镜像等。
镜像的来源方式:

  1. 自己做镜像 比如(自己开发微服务项目)
  2. 拉取别人制作好的镜像, 例如 nginx、mysql、redis等。

容器: 容器就是镜像运行的实例,容器状态分为:初创建、运行、停止、暂停、删除, 一个镜像可以创建多个不同的容器。

每个启动的容器都有自己独立ip信息—轻量级的linux服务器 虚拟化,比如:镜像就是类 容器就是实例对象。

Docker 启动过程

  1. docker在本机缓存中查找镜像文件,如果本地存在该镜像文,则以该镜像文件作为模板在容器中运行。
  2. 如果本地缓存中,没有该镜像文件 则会从dockerhub 或者加速镜像中
    查找,如果查找不到的话,则返回错误找不到该镜像。如果能够查找到该镜像,则以该镜像作为模板运行

三、Docker安装

Docker 要求 CentOS 系统的内核版本在 3.10以上 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。

文章末尾为docker离线安装流程。

  1. 查看当前的内核版本

    uname -r
    
    • 1
  2. 更新yml

    yum -y update
    
    • 1
  3. 如果有旧版docker,可以选择卸载

    yum remove docker docker-common docker-selinux docker-engine
    
    • 1
  4. 安装软件包

    yum install -y yum-utils device-mapper-persistent-data lvm2
    
    • 1
  5. 设置yum源

    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    
    • 1
  6. 查看仓库中所有docker版本

    yum list docker-ce --showduplicates | sort -r
    
    • 1
  7. 安装docker

    sudo yum install -y docker-ce 
    
    • 1
  8. 开机启动

    systemctl start docker
    systemctl enable docker
    
    • 1
    • 2
  9. 查看版本

    docker version
    
    • 1
  10. 如需重启docker

    systemctl restart docker
    
    • 1

四、使镜像相关命令

  1. 搜索镜像

    docker search java
    
    • 1
  2. 下载镜像,使用:选择版本

    docker pull java:8
    
    • 1
  3. 查看所有镜像

    docker images
    
    • 1
  4. 删除镜像,d23bdf5b1b1b为IMAGE ID

    docker rmi d23bdf5b1b1b
    
    • 1
  5. 导出镜像

    docker save -o nginx.tar nginx:latest
    或者
    docker save > nginx.tar nginx:latest
    导出多个镜像
    docker save -o test-allimage.tar java nginx
    
    • 1
    • 2
    • 3
    • 4
    • 5
  6. 加载镜像

    docker load -i nginx.tar
    或者
    docker load < nginx.tar
    
    • 1
    • 2
    • 3
  7. 导入容器为镜像和export 对应

    cat ./test.tar  | sudo docker import - dockertest:1.0
    
    • 1
  8. 配置阿里镜像加速

    https://cr.console.aliyun.com/cn-hangzhou/mirrors

五、容器相关命令

  1. 启动容器

    docker run -d -p 80:80 nginx
    
    • 1

    -d 后台运行
    -p 宿主机端口:容器端口

  2. 查看所有容器

    docker ps -a
    
    • 1
  3. 查看所有运行的容器

    docker ps
    
    • 1
  4. 容器自启

    docker run -itd --name xxx --restart=always  xxx
    
    • 1
  5. 添加指令

     docker update --restart=always xxx
    
    • 1
  6. 查看正在运行容器的信息

    docker inspect xxx
    
    • 1
  7. docker commit 容器制作为镜像文件

    docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签名]

    docker commit -m="my-image" -a="my"  3a07b4c779b8 my-tomcat:1.0
    
    • 1
  8. Docker数据卷

    数据卷就是宿主机上的一个文件或目录当容器目录和数据卷(宿主机)目录绑定,双方修改会立即同步操作一个数据卷可以被多个容器同时挂载。

    docker run -it -v 宿主机绝对路径目录:容器内目录 镜像文件名称

  9. 导出容器 export

    docker export -o test.tar nginx-test
    
    • 1
  10. 限制容器大小 --memory 8g

    docker run --rm -it --memory 8g -p 2881:2881 oceanbase/oceanbase-xe
    
    • 1

六、将springboot jar包 打包成镜像

  1. 将springboot打包成jar

    mvn package
    
    • 1
  2. 将jar包上传至 /usr/local/dockerapp目录下

    scp F:\javaProject\testboot\target\testboot.jar root@192.168.2.122: /usr/local/dockerapp
    
    • 1
  3. 在 /usr/local/dockerapp目录下创建文件Dockerfile

    ###指定java8环境镜像
    FROM java:8
    ###复制文件到容器app-springboot
    ADD testboot.jar /app-springboot.jar
    ###声明启动端口号
    EXPOSE 8080
    ###配置容器启动后执行的命令
    ENTRYPOINT ["java","-jar","/app-springboot.jar"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  4. 构建镜像

    docker build -t testboot  .
    
    • 1

    格式: docker build -t 镜像名称:标签 Dockerfile的相对位置

  5. 运行

    docker run -p 8080:8080 testboot
    
    • 1

七、Docker卸载应用程序

先删除容器,在删除镜像

  1. 查询容器

    docker ps –a
    
    • 1
  2. 使用容器id删除容器

    docker rm 18e672ecd8ed
    
    • 1
  3. 查询镜像

    docker images
    
    • 1
  4. 使用镜像id删除镜像

    docker rmi d23bdf5b1b1b
    
    • 1

八、Docker容器管理

进入到容器
默认情况下软件安装的目录的/ect目录下

docker container exec -it f0b1c8ab3633 /bin/bash
  • 1

九、Docker安装Nginx,并配置负载均衡

  1. 下载Nginx镜像文件

    docker pull nginx
    docker images
    
    • 1
    • 2
  2. 创建挂载目录

    mkdir -p /data/nginx/{conf,conf.d,html,logs}
    
    • 1
  3. 编写Nginx conf配置文件

    	upstream backserver { 
         	server 127.0.0.1:8080; 
         	server 127.0.0.1:8081; 
        } 
    
        server {
            listen       80;
            server_name 192.168.2.104;
            location / {
    		    proxy_pass  http://backserver;
    			index  index.html index.htm;
            }
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  4. 启动容器

    docker run 
    --name mynginx -d -p 80:80  
    -v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf  
    -v /data/nginx/logs:/var/log/nginx 
    -d docker.io/nginx
    
    • 1
    • 2
    • 3
    • 4
    • 5
  5. 查看容器

    docker ps
    
    • 1

十、Docker安装MySQL

  1. 查询mysql版本

    docker search mysql
    
    • 1
  2. 下载MySQL5.7版本

    docker pull mysql:5.7
    
    • 1
  3. 如果服务器没有网络情况下,可载入mysql镜像

    docker load -i mysql_5.7.12-image.tar.gz
    
    • 1
  4. 等待下载完成、创建MySQL容器

    docker create --name mysql3306 -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 mysql:5.7
    
    • 1

创建容器名称为mysql3306,密码为root

  1. 启动容器

    docker start mysql3306
    
    • 1
  2. 进入到容器

    docker exec -it 1e33b26152e1 /bin/sh
    
    • 1
  3. mysql连接

    mysql -u root –p
    
    • 1
  4. 开启远程连接

    GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "root";
    
    • 1

十一、Docker离线安装

  1. 下载docker

https://download.docker.com/linux/static/stable/x86_64/

或:

https://download.csdn.net/download/qq_43692950/13689046

  1. 上传至服务器,解压:
tar -zxvf docker-19.03.8.tar.gz
  • 1
  1. 将解压出来的docker文件内容拷贝到 /usr/bin/ 目录下
cp docker/* /usr/bin/
  • 1
  1. 注册docker为service,在/etc/systemd/system下新建docker.service文件:
nano /etc/systemd/system/docker.service
  • 1
  1. 将下面的内容加到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

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  1. 修改docker.service权限
chmod +x /etc/systemd/system/docker.service
  • 1
  1. 重载配置文件
systemctl daemon-reload
  • 1
  1. 启动Docker
systemctl start docker
  • 1
  1. 设置开机自启
systemctl enable docker.service
  • 1
  1. 验证
systemctl status docker
docker -v
  • 1
  • 2
  1. 设置阿里镜像加速
    创建daemon.json
mkdir -p /etc/docker
nano /etc/docker/daemon.json
  • 1
  • 2

填入下面内容:

{
  "registry-mirrors": ["https://你的id.mirror.aliyuncs.com"]
}
  • 1
  • 2
  • 3

重载配置

sudo systemctl daemon-reload
  • 1

重启docker

sudo systemctl restart docker
  • 1
  1. 可能发生的错误
    在运行容器时如果发生如下类似错误:
    container init caused \“write /proc/self/attr/keycreate: permission denied\““: unknown
    解决:修改/etc/selinux/config 文件,将SELINUX值修改为disabled。
nano /etc/selinux/config
  • 1

在这里插入图片描述

十二、修改默认存储位置

查看 docker 镜像的存储位置,默认情况下是 /var/lib/docker

docker info|grep "Docker Root Dir"
  • 1

停止所有的docker容器

docker ps | awk '{print $1}' |xargs docker stop
  • 1

停止docker服务

systemctl stop docker
  • 1

创建新的存储目录

mkdir -p /data/docker/
  • 1

将原来的数据复制过来

cp -r /var/lib/docker/* /data/docker/
  • 1

修改 daemon.json 文件

vi /etc/docker/daemon.json
  • 1

增加 data-root 配置:

{
	"data-root": "/data/docker",
	"registry-mirrors": ["https://XXXX.mirror.aliyuncs.com"]
}
  • 1
  • 2
  • 3
  • 4

启动docker服务

systemctl daemon-reload
  • 1
systemctl start docker
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/645388
推荐阅读
相关标签
  

闽ICP备14008679号