Docker使用指南

Docker使用指南

安装方式

设置Docker镜像加速

镜像操作

容器操作

数据卷操作

镜像文件制作

  • 基于制作的jdk8基础镜像运行nacos
  • 基于制作的jdk8基础镜像运行sentinel
安装方式
  • 离线脚本安装

    1. https://github.com/Jrohy/docker-install 下载离线安装脚本docker.bash、install.sh

    2. https://download.docker.com/ 选择版本并下载docker离线安装包,https://download.docker.com/linux/static/stable/x86_64/docker-20.10.9.tgz 可以直接下载单版本

    3. mkdir -p /root/setup/docker 创建安装文件存放目录,将docker.bash、install.sh、docker-20.10.9.tgz拷贝到该目录

    4. cd /root/setup/docker & chmod u+x install.sh 进入脚本所在目录并赋予执行权限

    5. ./install.sh -f docker-20.10.9.tgz 执行安装脚本

      出现 docker 20.10.9 install success! 表示安装成功。并可以使用docker info检查安装状态

  • 在线安装流程

    1. sudo yum install yum-utils -y 安装yum-utils工具

    2. 设置yum下载docker时的镜像加速,即增加备用yum仓库地址

      #官方仓库
      sudo yum-config-manager \
      	--add-repo \
      	https://download.docker.com/linux/centos/docker-ce.repo
      #阿里云仓库--镜像加速
      sudo yum-config-manager \
      	--add-repo \
      	http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
      #可以任选一个,阿里云的稍快一些,也可以都添加上
      
    3. sudo yum makecache fast 更新yum缓存

    4. sudo yum install docker-ce docker-ce-cli containerd.io -y 安装docker核心组件

    5. yum install docker-ce docker-ce-cli containerd.io -y --allowerasing 可以避免一些包冲突

      安装成功后执行systemctl enable docker命令设置开机自动启动,systemctl start docker命令启动docker,使用docker info检查安装状态

设置Docker镜像加速
  1. touch /etc/docker/daemon.json 创建docker外部配置文件

  2. vim /etc/docker/daemon.json 编辑该文件

    {
    	/*镜像地址池*/
      "registry-mirrors": [
        "https://docker.mirrors.ustc.edu.cn",//科大镜像站
        "http://hub-mirror.c.163.com"//网易镜像站
      ],
      "max-concurrent-downloads": 10,//当前最大下载数
      "log-driver": "json-file",//日志驱动
      "log-level": "warn",//日志级别
      "log-opts": {
        "max-size": "10m",
        "max-file": "3"
        },
      "data-root": "/var/lib/docker"//数据根目录
    }
    
  3. systemctl restart docker 重启docker以应用配置,执行docker info | grep "http"即可发现配置已生效

    ps.可以执行如下命令直接完成上面的前两步操作

    cat <<EOF > /etc/docker/daemon.json
    {
      "registry-mirrors": [
        "https://docker.mirrors.ustc.edu.cn",
        "http://hub-mirror.c.163.com"
      ],
      "max-concurrent-downloads": 10,
      "log-driver": "json-file",
      "log-level": "warn",
      "log-opts": {
        "max-size": "10m",
        "max-file": "3"
      },
      "data-root": "/var/lib/docker"
    }
    EOF
    
镜像操作

官方镜像表

1 2 3 4 5 6 7
alpine php sentry groovy oraclelinux bonita mageia
postgres amazonlinux logstash erlang swift fluentd silverpeas
ubuntu nextcloud zookeeper znc haxe backdrop hola-mundo
nginx maven couchdb phpmyadmin orientdb r-base known
busybox haproxy cassandra mono photon php-zendserver sapmachine
python ruby chronograf owncloud iojs clearlinux crux
traefik elasticsearch jenkins pypy ibmjava fsharp sl
redis centos drupal jruby crate eggdrop almalinux
httpd glassfish couchbase rust archlinux nuxeo euleros
node tomcat flink arangodb open-liberty lightstreamer sourcemage
mysql telegraf composer hylang haskell gazebo clefos
memcached vault matomo odoo opensuse thrift alt
openjdk adminer fedora xwiki varnish postfixadmin dart
golang ghost nats elixir plone express-gateway ibm-semeru-runtimes
mongo bash teamspeak jetty cirros eclipse-temurin scratch
hello-world kong swarm tomee notary celery hitch
mariadb caddy joomla aerospike julia friendica rockylinux
registry gradle kapacitor jobber irssi hello-seattle cheers
debian java percona django r-base spiped dcl2020
docker neo4j adoptopenjdk piwik storm swipl eclipse-mosquitto
sonarqube kibana rethinkdb ros clearlinux rapidoid websphere-liberty
rabbitmq solr mediawiki gcc neurodebian docker-dev ubuntu-debootstrap
wordpress buildpack-deps redmine clojure geonetwork rakudo-star
influxdb mongo-express nats-streaming yourls backdrop Kaazing Gateway
consul perl rocket.chat amazoncorretto hipache ubuntu-upstart
  1. 镜像搜索

    dockers search image
    
    • docker search centos
      
    • docker search ubuntu
      
    • docker search debian
      
    • docker search alpine
      
    • docker search busybox
      

  2. 镜像拉取(下载镜像)

    docker pull image
    
  3. 查看本地镜像

    docker images
    
  4. 查看镜像

    docker inspect image(tageName或者imgID--ID只需提供前几位即可,需要唯一)
    
  5. 查看镜像历史记录,即每一层(layer)的构建信息,history指令只能用于镜像

    docker history image
    
  6. 导出镜像文件(该命令会导出在当前目录)

    docker save image | gzip > image.tar.gz
    
  7. 删除镜像文件(镜像文件被容器使用时必须添加-f参数进行删除,但不推荐)

    docker image rm image
    
  8. 从本地(当前目录)导入镜像文件

    docker load < image.tar.gz 或者 docker load -i image.tar.gz
    
  9. 运行镜像文件

    docker run image
    
    • -it参数->interaction terminal(interactive tty)表示以交互式终端进行,
    • -d参数->detach表示后台运行容器并打印容器id,
    • -p hostport:virtualport参数表示指定端口映射,
    • -v volume:virtualDir参数表示设定挂载点–volume可以时docker创建的数据卷也可以是hostDir,
    • -w virtualDir参数表示设定容器工作目录,
    • –name containerName参数表示设定容器名,
    • -e XXX=xxx(environment)参数表示设定容器环境变量
    • –mount source=volume,target=virtualDir参数表示设定挂载点可以与-v volume:virtualDir等效替换
    • –network net参数表示指定容器加入docker自建的名为net的网络
    • –restart=always参数表示容器开机自启动

    run指令每执行一次就会创建一个新的容器,容器创建后其创建时指定的参数没有命令可以修改,只能手动修改启动配置文件(改错容器就无法启动),但可以通过docker container update configItem containerID指令增加配置项

容器操作
  1. 从镜像创建容器,不指定–name配置项则随机生成name

    docker run image
    
  2. 创建、启动容器并反弹容器伪终端,在该为终端执行exit退出终端时容器也会停止,一般会在run后加入-d参数使容器在后台运行但需要使用exec指令获取容器伪终端(进入容器)

    docker run -it image bash
    
  3. 进入容器(获取容器伪终端)

    docker exec -it container bash
    
  4. 查看正在运行的容器

    docker ps
    
  5. 查看所有容器

    docker ps -a
    
  6. 查看容器主程日志(标准输入、输出),exec伪终端的操作不会被记录日志,但应用日志内会记录execID

    docker container logs containerID
    
  7. 通过容器ID启动容器,也可以通过容器name启动

    docker container start containerID
    
  8. 停止容器

    docker container stop containerID
    
  9. 重启容器

    docker container restart containerID
    
  10. 删除容器(容器正在运行时需要添加-f参数进行强制删除操作)

    docker container rm containerID
    
  11. 删除所有未启动的容器(会提示是否删除,输y回车即可但不建议)

    docker container prune containerID
    

    ps.若要从容器中退出来执行exit命令即可或者先按下Ctrl+p再按下Ctrl+q或者按住Ctrl不放再依次按p、q亦可退出容器

数据卷操作
  1. 创建数据卷

    docker volume create volName
    
  2. 查看所有数据卷

    docker volume ls
    
  3. 通过数据卷名查看数据卷的详情信息

    docker volume inspect volName
    
  4. 通过卷名删除数据卷

    docker volume rm volName
    
  5. 删除所有未被使用的数据卷(未被容器挂载)

    docker volume prune
    

    ps.可以通过docker inspect containerID查看容器的"Mounts"即挂载卷信息

镜像文件制作

全装JDK-8u251的centos7镜像制作过程:

  1. 拉取centos:7官方基础镜像

    docker pull centos:7
    
  2. 到Oracle官网下载jdk,并将jdk-8u251-linux-x64.tar.gz移动到宿主机/usr/local/jdk目录下

  3. 在宿主机/usr/local/jdk目录下使用vim命令新建Dockerfile并写入如下内容:

    FROM centos:7
    ADD jdk-8u251-linux-x64.tar.gz /usr/local/java
    ENV JAVA_HOME=/usr/local/java/jdk1.8.0_251 \
    	PATH=/usr/local/java/jdk1.8.0_251/bin:$PATH
    CMD ['bash']
    
  4. 在Dockerfile所在的目录执行如下命令完成镜像文件构建

    docker build -t centos7:jdk8 .
    

对制作的centos7:jdk8基础镜像进行测试:

  1. 使用centos7:jdk8创建一个容器

    docker run -d -it --name java -v /root/temp:/root/temp -w /root/temp jdk:8 bash
    
  2. 在宿主机/root/temp目录下新建Hello.java文件并写入如下内容以进行简单测试

    public class Hello{
    	public static void main(String[] args){
    		System.out.print("Hello World!\n");
    	}
    }
    
  3. 使用容器环境进行编译工作

    docker exec -it java javac Hello.java
    
  4. 使用容器环境运行java程序

    docker exec -it java java Hello
    

    最后结果输出:Hello World!

    ps.所有用到的命令、指令以及参数在上文都已介绍过了

基于centos7:jdk8镜像运行nacos

要运行nacos,必须先配备数据库并导入nacos_config.sql文件导入sql脚本前要先创建nacos_config数据库,nacos_configsql文件在nacos资源文件的conf目录下,nacos资源文件下载,此案例默认已配备好了数据库

  1. 首先将nacos资源文件nacos-server-1.4.2.zip在/root/temp目录下解压

    unzip nacos-server-1.4.2.zip
    
  2. 使用vim修改vim /root/temp/nacos/conf/application.properties配置文件,需要修改的三个地方如下:

    #将### If use MySQL as datasource:条目下的spring.datasource.platform=mysql前的注释去掉
    spring.datasource.platform=mysql
    #将### Count of DB:条目下的db.num=1注释去掉
    db.num=1
    #在### Connect URL of DB:条目下配置数据库连接信息,你自己的数据库连接地址、用户名和密码
    db.url.0=jdbc:mysql://localhost:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
    db.user.0=dbuser
    db.password.0=dbpwd
    
  3. 使用centos7:jdk8创建一个nacos适配容器并启动

    docker run -d -it --name java-ncs -p 8848:8848 -v /root/temp:/root/temp -w /root/temp centos7:jdk8 bash
    
  4. 在宿主机依次执行下面两条命令以启动nacos,第一条命令将为第二条命令提供参照,所以顺序不能相反

    docker exec -it java-ncs ./nacos/bin/startup.sh -m standalone
    docker exec -it java-ncs nohup `cat /root/temp/nacos/logs/start.out` &
    
  5. 在浏览器通过http://hostip:8848/nacos即可实现对nacosWEB页面进行访问(hostip为宿主机ip)

    ps.第4步之所以要用两条命令是因为第一条命令在逻辑上可行但实际上在宿主机上是不能成功执行滴所以需要第二行基础命令来启动nacos,当然也可以用基础命令启动前提是需要全部的启动参数,注意:如果exec进入容器那么第一条命令就能正确执行了。后面也可以使用官方的nacos镜像或者制作一个nacos镜像来简化这些繁杂的步骤,这里只是拿来测试jdk基础镜像的韧性罢了。

基于centos7:jdk8镜像运行sentinel

sentinel资源文件下载

  1. 首先将sentinel资源文件sentinel-dashboard-1.8.1.jar弄到/root/temp目录(不管你用什么方法,wget、scp、ftp)

  2. 使用centos7:jdk8创建一个sentinel适配容器并启动

    docker run -d -it --name java-stn -p 8180:8080 -v /root/temp:/root/temp -w /root/temp centos7:jdk8 bash
    
  3. 在宿主机启动sentinel

    docker exec -it java-stn nohup java -jar sentinel-dashboard-1.8.1.jar &
    
  4. 在浏览器通过http://hostip:8180即可实现对sentinelWEB页面进行访问了(hostip为宿主机ip)

你可能感兴趣的:(docker,容器)