docker的使用方法

Docker-安装

  1. 删除已安装好的docker
    sudo yum remove docker
    docker-client
    docker-client-latest
    docker-common
    docker-latest
    docker-latest-logrotate
    docker-logrotate
    docker-engine;

  2. 安装yum管理工具:
    yum install -y yum-utils

  3. 安装必要的系统依赖:
    sudo yum install -y yum-utils device-mapper-persistent-data lvm2

  4. 源(和maven仓库配置类似)
    (官方)
    yum-config-manager —add-repo https://download.docker.com/linux/centor/docker-ce.repo(
    (阿里云)
    sudo yum-config-manager
    –add-repo
    https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo

  5. 更新yum缓存
    sudo yum makecache fast

  6. 安装Docker-CE(免费版)
    sudo yum -y install docker-ce

  7. 启动Docker后台服务
    sudo systemctl start docker

  8. 重启Docker服务
    sudo systemctl restart docker

  9. 安装后查看版本
    docker version

Docker-镜像加速器

官方加速器:
https://docs.docker.com/registry/recipes/mirror/#use-case-the-china-registry-mirror
cd /etc/docker/daemon.json

  1. 创建docker文件夹
    mkdir -p /etc/docker
  2. 创建json文件
    vi daemon.json
    网易镜像中心:https://c.163.com/hub#/m/home/
    daocloud镜像市场:https://hub.daocloud.io/
    中国科技大学的源:
    {
    “registry-mirrors”: [“https://docker.mirrors.ustc.edu.cn”]
    }
    cat daemon.json
  3. 重启docker
    sudo systemctl daemon-reload
    sudo systemctl restart docker
  4. 检查是否生效
    docker info

Docker-镜像获取&删除
镜像获取:

  1. 镜像查找
    docker search --help
  2. 镜像网站查找地址
    https://registry.hub.docker.com/
  3. 列出镜像
    docker image ls
  4. 获取镜像
    docker pull [选填] [Docker Register 地址[ : 端口号]/] 镜像名[ :标签]
    例如:docker pull tomcat
    docker pull tomcat:8

说明(镜像体积):
docker image ls 中表示的占用空间和在 Docker Hub上看到的镜像大小不同。是因为Docker Hub中显示的体积是压缩后的体积。镜像下载和上传的过程中镜像是保持压缩状态的。因此Docker Hub所显示的大小是网络传输中的流量大小。而docker image ls中显示的镜像是下载到本地后,展开的大小。准确说,是展开后的各层所占空间的总和。因为镜像到本地后,产看空间时,更关心的是本地磁盘空间的占用。
另外一个需要注意的,docker image ls 中的镜像体积总和并非是所有镜像实际硬盘的消耗。由于Docker镜像是多层存储结构,并且可以集成、复用,因此不同镜像可能会因为使用相同的基础镜像,从而有公用的层。由于docker使用Union FS,相同的层只需要保存一份即可。因此实际镜像硬盘占用空间可能要比列表镜像大小的总和要小的多。

镜像删除:
5. 删除镜像
docker image rm [选项] <镜像1> [<镜像2>……]
用ID、镜像名、摘要删除镜像
其中<镜像> 可以是镜像短ID、镜像长ID、镜像名、镜像摘要。
如果要删除本地镜像,可以使用docker image rmi/rm 命令
常用:docker image rmi 镜像ID
要删除镜像必须确认镜像没有被容器使用!!!

  1. 辅助命令
    查看本地镜像IMAGE ID: docker images -q
    查看一个镜像的制作历程: docker history 镜像名称

Docker保存镜像:
7. 备份本地仓库的镜像
用save子命令将本地仓库的镜像保存在当前目录下:
docker save -o tomcat.chen.tar 镜像名称

    将本地目录下的镜像备份文件导入到本地Docker仓库
    docker load -I tomcat.chen.tar //不输出详细信息
    docker load < tomcat.chen.tar //输出详细信息

Docker-容器

Docker 面向对象来说
容器 对象
镜像 类

  1. 查看容器状态
    docker ps //查看运行的容器
    docker ps -a //查看所有的容器(包含运行和退出)
    docker container ls
    docker container ls -a

  2. Docker启动容器
    两种方式:一种是机遇镜像新建一个容器并启动,一种是将终止状态(stopped)的容器重新启动
    docker run 参数 镜像名称:tag 执行的命令
    常用参数:
    -i:保持和 docker 容器内的交互,启动容器时,运行的命令结束后,容器依然存活,没有退出(默认是会退出,即停止的)
    -t: 为容器的标准输入虚拟一个t ty
    -d: 后台运行容器
    –rm: 容器在启动后,执行完成命令或程序后就销毁
    –name: 给容器起一个自定义名称
    –p: 宿主机(Linux对外能访问的):内部端口
    docker run --rm -d --name tomcat1 -p 8080:8080 tomcat
    docker run -d --name tomcat-8899 -p 8899(对外访问的端口):8899(容器内部端口)
    docker run -d --name tomcat-8899 -p 8899:8080 tomcat
    docker run -d --name tomcat-8888 -p 8888:8080 tomcat
    docker run -d --name tomcat-8877 -p 8877:8080 tomcat
    docker run -d --name tomcat-8866 -p 8866:8080 tomcat

  3. 容器停止
    docker stop ID/NAME
    docker stop $(docker ps -a -q) 停止当前列出的所有容器

  4. 容器启动
    docker start ID/NAME

  5. 容器删除
    docker rm ID (正在运行的容器是不能移除的)
    docker rm $(docker ps -a -q) 删除所有当前列出的所有容器

Docker-Tomcat访问 & 进入容器

//查看端口开放列表
firewall-cmd --list-ports
//开启端口
firewall-cmd --zone=public --add-port=8081/tcp --permanent
firewall-cmd --reload

Docker 容器

  1. 进入容器
    docker exec -i -t 容器id/Name bash
    例子:docker exec -it ffca0d5a6f4b bash
    ls -l
    mkdir ROOT
    echo ‘java’>>index.html

  2. 退出容器
    exit

Docker-cp 复制指令

宿主机和容器之间交换文件

//容器中 复制到 宿主机
docker cp [OPTIONS] CONTAINER:PATH LOCALPATH
例如:docker cp tomcat-8081:/usr/local/tomcat/webapps/ROOT/index.html /root

//宿主机 复制到 容器中
docker cp [OPTIONS] LOCALPATH | - CONTSINER:PATH

例如:docker cp index.html tomcat-8081:/usr/local/tomcat/webapps/ROOT

Docker-日志
Docker查看日志
docker logs 容器名称/ID

例子:
docker logs -f -t --since=‘2018-12-1’ --tail=10 qfjy_exam
–since 此参数指定输出日期的开始日期,即只输出制定日志之后的日志
-f 查看实时日志
-t 查看日志产生的日期
-tail=10 查看最后的10条日志
qfjy_exam 容器名称

docker logs -f --tail=10 容器名称

Docker 数据卷(volume)

问题:通过镜像创建一个容器,容器一旦被销毁,则容器内的数据将一并被删除,但有些情况下,通过服务器上传的图片会出现丢失,容器的数据不是持久化状态的。

数据卷:是一个可供一个或多个容器使用的特殊目录

特性:
可以在容器之间共享和重用
对数据卷的修改会立马生效
对数据的更新,不会影响镜像
数据卷默认会一直存在,即使容器被删除

为什么需要数据卷?

处于效率等一系类原因,docker容器的文件系统在宿主机上存在的方式很复杂,这会带来一下几个问题:

  1. 不能在宿主机上很方便的访问容器中的文件
  2. 无法在多个容器之间共享数据
  3. 当容器删除时,容器中产生的数据将会丢失

为了解决这些问题,docker引入了数据卷(volume)机制,数据卷是存在于一个或多个容器中的特定文件或文件夹,这个文件或文件夹独立于docker文件系统的形式存在于宿主机中。

数据卷的最大特定是:其生命周期独立于容器的生存周期

使用数据卷的最佳场景:
4. 在多个容器之间共享数据,多个容器可以同时以只读或者读写的方式挂载同一个数据卷,从而共享数据卷中的数据
5. 当宿主机不能保证一定存在某个目录或一些固定路径的文件时,使用数据卷可以规避这种限制带来的问题
6. 当你想把容器中的数据存储在宿主机之外的地方时,比如远程主机上或云存储上

数据卷的应用

  1. 创建数据卷
    docker volume create 数据卷名称
    创建数据卷之后,默认会存放到目录: /var/lib/docker/volume/数据卷名称/_data 目录下

  2. 查看数据卷
    docker volume inspect 数据卷名称

  3. 查看全部数据卷信息
    docker volume ls

  4. 删除数据卷
    docker volume rm 数据卷名称

  5. 应用数据卷
    当映射数据卷时,如果数据卷不存在,Docker会自动帮你创建
    docker run -v 数据卷名称:容器路径 镜像ID

     直接指定一个路径作为数据卷的存储位置
     docker run -v 路径:容器内部路径 镜像ID
    

案例:
//创建容器,关联数据卷
1. docker volume create docker-volume-demo
2. 创建一个index.html文件
3.创建容器,关联数据卷
sudo docker run -d --name tomcat-8081 -p 8081:8080 -v docker-volume-demo:/usr/local/tomcat/webapps/ROOT/ --privileged=true tomcat
4.修改数据卷中的index.html 后保存刷新页面

    进入容器查看数据卷关联文件是否存在        
            docker exec -it tomcat-8081 bash

Docker-安装Nginx

  1. 拉取Nginx镜像
    docker pull nginx:latest

  2. 查看本地镜像列表
    docker images

  3. 运行容器
    docker run --name nginx-dev -p 80:80 -d nginx

     --name nginx-dev : 容器名称
     -p 80:80 将本地8080端口映射到容器内部的80端口
     -d nginx 设置容器后台运行
    
  4. 进入容器
    docker exec -it nginx-dev bash

  5. 查看目录
    whereis nginx
    nginx:
    /usr/sbin/nginx
    /usr/lib/nginx
    /etc/nginx //存放config核心文件
    /usr/share/nginx //存放静态html文件

高级安装

为了方便开发和配置,需要将Docker容器内的信息进行宿主机间的配置

    mkdir -p /usr/local/nginx-docker

依次在改目录下创建三个文件目录
6. 创建 www目录
mkdir -p /usr/local/nginx-docker/html
7. 创建日志目录
mkdir -p /usr/local/nginx-docker/logs
8. 创建配置文件目录
mkdir -p /usr/local/nginx-docker/conf

拷贝配置文件
docker cp 容器ID:/etc/nginx/nginx.conf /usr/local/nginx-docker/conf
docker cp 容器ID:/etc/nginx/conf.d/ /usr/local/nginx-docker/conf

docker run --name nginx-dev -d -p 81:80 -v /usr/local/nginx-docker/html:/usr/share/nginx/html -v /usr/local/nginx-docker/conf/nginx.conf:/etc/nginx/nginx.conf -v /usr/local/nginx-docker/logs:/var/log/nginx -v /usr/local/nginx-docker/conf/conf.d:/etc/nginx/conf.d -d nginx:latest

集群:修改nginx.conf
upstream nginxCluster{
server 127.0.0.1:8080;
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}

vi conf.d/default.conf
location /{
proxy_pass http://nginxCluster;
}

docker run --name nginx-dev -d -p 81:80 -v /usr/local/nginx-docker/conf/nginx.conf:/etc/nginx/nginx.conf -v /usr/local/nginx-docker/conf/conf.d:/etc/nginx/conf.d -d nginx:latest

Docker 部署springBoot
/www/main_hour_system/mhs-0.0.1-SNAPSHOT.jar
在这里插入图片描述

构建
docker build -t mhs-docker .
容器
docker run -d --name mhs-docker-8089 -p 8089:8088 --rm mhs-docker

IDEA 集成docker

注:启动的时候遇到的错误:Job for docker.service failed. See ‘systemctl status docker.service’ and ‘journalctl -xn’ for details
解决办法:
修改文件
命令 vi /etc/selinux/config
修改内容:将 SELINUX=enforcing 改为 SELINUX=disabled

firewall-cmd --zone=public --add-port=2375/tcp --permanent

firewall-cmd --reload

Docker 图形化工具

  1. 查看portainer镜像
    docker search portainer

  2. 镜像下载
    docker pull portainer/portainer

  3. 启动dockerrui容器
    docker run -d --name portainerUI -p 9000:9000 -v /var/run/docker/docker.sock:/var/run/docker.sock portainer/portainer

  4. 9000防火墙配置
    firewall-cmd --list-ports
    firewall-cmd --zone=public --add-port=9000/tcp --permanent
    firewall-cmd --reload

Docker Compose

负责快速的部署分布式应用

它允许用户通过一个docker-compose.yml 模版文件来定义一组相关联的应用容器为一个项目(project)

Compose的两个重要的概念:

  1. 服务(service):一个应用的容器,实际上可以包含若干个运行相同镜像的容器实例
  2. 项目(project): 由一组关联的应用容器组成的一个完整的业务单元,在docker-compose.yml文件中定义

Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷的生命周期管理。

Docker Compose安装与卸载

GitHub官方网站 搜索Docker compose
https://github.com/docker/compose/releases/download/1.25.5/docker-compose-Linux-x86_64

将下载好的文件拖入Linux 并复制到 /usr/local 目录下
scp /Users/abcd1234/Desktop/docker/docker-compose-Linux-x86_64 root@10.9.12.36:/usr/local

修改名称(为后面方便调用) 并修改其为可执行文件
mv docker-compose-Linux-x86_64 docker-compose

修改为可执行权限
chmod 777 docker-compose

配置环境变量,复制到该路径下之后 任意位置皆可执行
mv docker-compose /usr/local/bin/

Docker Compose 使用
术语

  1. 服务(service):一个应用的容器,实际上可以包含若干个运行相同镜像的容器实例
  2. 项目(project): 由一组关联的应用容器组成的一个完整的业务单元,在docker-compose.yml文件中定义
    可见,一个项目由多个服务(容器)关联而成,Compose面向项目进行管理

Docker-compose创建容器
通过一个单独的docker-compose.yml模版文件来定义一组关联的应用容器作为一个项目。

mkdir -p /opt/docker-mhs-cluster

vim docker-compose.yml

version: ‘3.0’
services:
mhs-docker-8088:
restart: always
image: mhs-docker-8088
container-name: mhs-docker-8088
ports:

  • 8088:8088
    mhs-docker-8099:
    restart: always
    image: mhs-docker-8099
    container-name: mhs-docker-8099
    ports:
  • 8099:8099

启动容器
docker-compose up -d
关闭
docker-compose stop
删除容器
docker-compose down

Docker 认证命令配置
https://docs.docker.com/engine/security/protect-access/

  1. 创建ca文件夹 存在CA私钥和公钥
    mkdir -p /usr/local/ca
    cd /usr/local/ca

  2. 生成CA私钥和公钥
    openssl genrsa -aes256 -out ca-key.pem 4096
    horizon

  3. 一次输入密码、国家、省、市、组织名称、邮箱等:
    openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem

     cn bj bj test test test test@163.com
    
  4. 生成server-key.pem
    openssl genrsa -out server-key.pem 4096

  5. CA来签署公钥
    openssl req -subj “/CN=10.9.12.36” -sha256 -new -key server-key.pem -out server.csr

  6. 配置白名单
    echo subjectAltName = IP:10.9.12.36,IP:0.0.0.0 >> extfile.cnf

  7. 执行命令 将Docker守护程序密钥的扩展使用属性设置为仅用于服务器身份验证
    echo extendedKeyUsage = serverAuth >> extfile.cnf

  8. 生成签名证书
    openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem
    -CAcreateserial -out server-cert.pem -extfile extfile.cnf

  9. 生成客户端key
    openssl genrsa -out key.pem 4096
    openssl req -subj ‘/CN=client’ -new -key key.pem -out client.csr

  10. 要使密钥适合客户端身份验证
    echo extendedKeyUsage = clientAuth >> extfile.cnf
    echo extendedKeyUsage = clientAuth > extfile-client.cnf

  11. 生成签名证书
    openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem
    -CAcreateserial -out cert.pem -extfile extfile-client.cnf

  12. 删除无用的扩展配置文件
    rm -v client.csr server.csr extfile.cnf extfile-client.cnf

  13. 可修改权限
    保护密钥免受意外损坏,删除读写权限,使其只能被您读取,更改文件模式
    chmod -v 0400 ca-key.pem key.pem server-key.pem

    证书是可以对外读取的,删除写入权限以防止意外损坏
    chmod -v 0444 ca.pem server-cert.pem cert.pem
    
  14. 归集服务器证书
    cp server-*.pem /etc/docker
    cp ca.pem /etc/docker

  15. 修改docker配置
    使docker守护程序仅接受来自提供CA信任的证书的客户端连接。
    vim /lib/systemd/system/docker.service

    将 ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
    替换为
    ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/usr/local/ca/ca.pem --tlscert=/usr/local/ca/server-cert.pem --tlskey=/usr/local/ca/server-key.pem -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
    
  16. 重新加载daemon并重启docker
    systemctl daemon-reload
    systemctl restart docker

  17. 开放2375端口
    /sbin/iptables -I INPUT -p tcp --dport 2375 -j ACCEPT

  18. 重启docker
    systemctl restart docker

IDEA操作Docker

  1. 保存相关客户端的pem文件到本地

scp -P22 -pr root@10.9.12.36:/usr/local/ca/ca.pem /Users/abcd1234/Desktop/docker/ca
scp -P22 -pr root@10.9.12.36:/usr/local/ca/ca-key.pem /Users/abcd1234/Desktop/docker/ca
scp -P22 -pr root@10.9.12.36:/usr/local/ca/cert.pem /Users/abcd1234/Desktop/docker/ca
scp -P22 -pr root@10.9.12.36:/usr/local/ca/key.pem /Users/abcd1234/Desktop/docker/ca

Docker center path maven 解决方案
https://www.it1352.com/1609164.html

Docker使用期间的问题(不定期更新)

  1. 容器日志时间和系统时间相差8小时
    进入容器:
    docker exec -u 0 -it ppm-dev-8005 /bin/bash
    添加timezone
    echo “Asia/Shanghai” > /etc/timezone
    重启容器
  • 15
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值