• 【Docker】Docker入门学习


    【Docker】学习docker

    1.Docker安装与启动

    1.1.安装

    • 【第一步】yum包更新到最新版本
    sudo yum update
    
    • 1
    • 【第二步】安装需要的软件包,yum-util提供的yum-config-manager功能,另外两个是devicemapper驱动依赖的
    sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    
    • 1
    • 【第三步】设置yum源为阿里云
    sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    • 1
    • 【第四步】安装docker
    • 注意:docker有两个版本:社区版(docker-ce)免费,企业版(docker-ee)收费
    sudo yum install docker-ce
    
    • 1

    1.2.设置ustc的镜像

    ustc是老牌的linux镜像服务提供者,加速docker镜像下载,不需要注册,是真正的公共服务。

    • 【第一步】编辑daemon.json文件
    # 编辑模式打开该文件:
    vi /etc/docker/daemon.json
    # 在文件中输入如下内容:
    {
        "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    1.3.Docker的启动与停止

    • 【步骤一】使用systemctl命令操作docker的启动停止
    #1.启动docker
    systemctl start docker
    #2.停止docker
    systemctl stop docker
    #3.重启docker
    systemctl restart docker
    #4.查看docker状态
    systemctl status docker
    #5.设置开机自启docker
    systemstl enable docker
    ###6.查看docker的概要信息###
    docker info
    ###7.查看docker的帮助文档###
    docker --help
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    2.Docker常用命令

    2.1.镜像相关命令

    • 【命令一】查看镜像
    #查看镜像
    docker images
    
    • 1
    • 2

    在这里插入图片描述
    注释:(镜像存储位置:Docker宿主机的var/lib/docker目录下)

    REPOSITORYTAGIMAGE IDCREATEDSIZE
    镜像名称镜像标签镜像ID镜像的创建日期(非我们拉取下载的日期)镜像大小
    • 【命令二】搜索镜像
    #如果你需要从网络中查找需要的镜像,可以通过以下命令搜索
    docker search 镜像名称
    
    • 1
    • 2

    在这里插入图片描述
    注释:

    NAMEDESCRIPTIONSTARSOFFICIALAUTOMATED
    镜像名称镜像描述用户评价是否官方自动构建,表示该镜像由Docker Hub自动构建流程创建的
    • 【命令三】拉取镜像
    #1.拉取镜像:从中央仓库中下载镜像到本地
    docker pull 镜像名称
    #2.若未设置拉取镜像的版本,默认拉取最新的版本,如下设置拉取镜像的版本
    # 冒号后跟版本号
    docker pull centos:7
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 【命令四】删除镜像
    #1.按镜像ID删除镜像
    docker rmi 镜像ID
    #2.删除所有镜像
    docker rmi `docker images -q`
    
    • 1
    • 2
    • 3
    • 4

    2.2.容器相关命令

    • 【命令一】查看容器
    #1.查看正在运行的容器
    docker ps
    #2.查看所有容器
    docker ps -a
    #3.查看最后一次运行的容器
    docker ps -l
    #4.查看停止的容器
    docker ps -f status=exited
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 【命令二】创建与启动容器
    #1.创建容器的基础命令
    docker run
    #1.1.携带参数说明:
    -i #表示运行此容器
    -t #表示容器启动后会进入其命令行,加入这两个参数后,容器以可登录进去的方式创建一个伪终端。
    --name #创建的当前容器的名字
    -v #表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
    -d #在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i-t两个参数,创建后就会自动进入容器)。
    -p #表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射。
    
    #2.创建容器的两种方式
    #2.1.交互式方式创建容器
    docker run -it --name=容器名称 镜像名称:标签 /bin/bash
    #此时已经进入创建好的容器中了,并且可以使用ps命令查看启动的容器状态
    #此时退出容器使用命令
    exit
    #2.2.守护式方式创建容器
    docker run -di --name=容器名称 镜像名称:标签
    #标签:就是容器的tag
    #登录守护式容器方式
    docker exec -it 容器名称(或者容器ID) /bin/bash
    
    #3.创建容器-设置服务器重启、docker服务重启、docker创建的当前镜像也会自动启动
    docker run -di --name=容器名称 --restart=always 镜像名称:标签
    #3.1.给已经创建的容器设置自启
    docker update --name=容器名称 --restart=always
    #注意结论:
    #一、以交互式方式创建的容器,退出容器后,容器自动关机
    #二、以守护方式创建的容器,不直接进入容器,默认后台运行容器,可以使用命令登录容器,退出容器,容器依然正常运行。
    
    • 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

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    • 【命令三】停止与启动容器
    #1.停止容器
    docker stop 容器名称(或者容器ID)
    #2.启动容器
    docker start 容器名称(或者容器ID)
    
    • 1
    • 2
    • 3
    • 4
    • 【命令四】文件拷贝
    #1.将文件拷贝到容器内可以使用cp命令
    docker cp 需要拷贝的文件或目录 容器名称(或者容器ID):容器目录
    #2.将文件从容器内拷贝出来
    docker cp 容器名称(或者容器ID):容器目录 需要拷贝的文件或目录
    
    • 1
    • 2
    • 3
    • 4
    • 【命令五】目录挂载

    目录映射:我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样就可以通过修改宿主机某个目录的文件从而去影响容器。

    #1.创建容器添加-v参数的后面为: (宿主机目录:容器目录),如下:
    docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=myTomcat tomcat:8
    #注意:如果你共享的是多级的目录,可能会出现权限不足的提示
    #这是因为CentOS7中的安全模块selinux把权限禁掉了,需要添加如下参数,来解决挂载的目录没有权限的问题。
    --privileged=true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 【命令六】查看容器的IP地址
    #1.通过如下命令查看容器运行的各种数据
    docker inspect 容器名称(或者容器ID)
    #2.直接输出IP的命令
    docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)
    
    • 1
    • 2
    • 3
    • 4
    • 【命令七】删除容器
    #1.删除指定容器
    docker rm 容器名称(或者容器ID)
    #2.强制删除正在运行中的容器
    docker rm -f 容器名称(或者容器ID)
    
    • 1
    • 2
    • 3
    • 4
    • 【命令八】进入容器内部操作
    #1.进入正在运行的指定容器
    docker exec -it 容器名称(或者容器ID) /bin/bash
    docker exec -it 容器名称(或者容器ID) /bin/sh
    #2.退出容器
    exit
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.Docker的应用部署

    3.1.MySql部署

    #1.拉取mysql镜像
    docker pull centos/mysql-57-centos7
    #2.创建容器
    docker run -di --name=tensquare_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
    #注释: -p代表端口映射,格式为: (宿主机映射端口:容器运行端口)
    #      -e代表添加环境变量 MYSQL_ROOT_PASSWORD 是root用户的登录密码
    #3.进入mysql容器
    docker exec -it tensquare_mysql /bin/bash
    #4.登录mysql
    mysql -u root -p
    #5.远程登录mysql
    #连接宿主机的IP,指定端口为33306
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    3.2.Tomcat部署

    #1.拉取镜像
    docker pull tomcat:7-jre7
    #2.创建容器  (-p表示地址映射)
    docker run -di --name=mytomcat -p 9000:8080 -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:7-jre7
    #注意:映射完路径的webapps文件夹会被清空,需要再宿主机上部署自己的war包到webapps目录下
    #使用sftp上传包的命令:(单个文件上传命令)
    sftp> put d:\目录1\dgc.war
    #使用sftp上传一个目录的命令:
    sftp> put -r d:\目录1\需要上传目录
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3.3.Nginx部署

    #1.拉取镜像
    docker pull nginx
    #2.创建Nginx容器
    docker run -di --name=dgcNginx -p 81:80 nginx
    #3.进入Nginx容器
    docker exec -it dgcNginx /bin/bash
    #3.1.修改nginx的index.html页面
    echo "

    Welcome to Nginx Dogulas

    "
    > index.html #部署前端vue项目到容器内步骤: #1.将需要部署的项目包 改名为 html: mv 需要部署的项目文件 html #2.拷贝到nginx的目录下覆盖原有的html目录: docker cp html dgcNginx:/usr/share/nginx #注意:docker安装的nginx地址在:/etc/nginx,但是项目部署访问映射的地址可以通过nginx.conf看到,一般在:/usr/share/nginx
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    3.4.Redis部署

    #1.拉取镜像
    docker pull redis
    #2.创建容器(默认创建方式)
    docker run -di --name=dgcRedis -p 6379:6379 redis:latest
    #3.挂载宿主机配置文件和数据文件地址-且启动加载自定义配置文件
    docker run -di --name=myRedis -p 6379:6379 -v /opt/dockerTool/redis/redis.config:/etc/redis/redis.config -v /opt/dockerTool/redis/data:/data (镜像名称:版本号)redis:latest (加载自定义配置)redis-server /etc/redis/redis.config
    #使用命令远程连接redis服务:本地得有redis-cli安装包
    #执行连接命令:redis-cli -h 150.158.7.35
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    4.Docker的迁移与备份

    4.1.容器保存为镜像

    #1.将已有的容器保存为镜像
    docker commit dgcNginx dgcnginx_1
    docker commit -a "作者" -m "改变说明" 容器名称(容器ID)  自定义镜像名称(目标镜像名称必须全部为小写)例如:dgcnginx:v1.0.0
    
    • 1
    • 2
    • 3

    4.2.镜像备份

    #1.通过如下命令可以将镜像保存为tar文件
    docker save -o dgcNginx.tar dgcNginx_1 
    docker save -o 输出的文件名称  镜像名称
    
    • 1
    • 2
    • 3

    4.3.镜像恢复与迁移

    #1.恢复前当前宿主机不能存在当前需要恢复的镜像,可以先删除dgcnginx_1镜像,使用如下命令导入备份的镜像,进行恢复:
    docker load -i dgcNginx.tar
    #注意:-i 输入的文件,执行完毕可以再次查看镜像,已经恢复
    #注意删除镜像的顺序:
    #1.1.停止当前运行的该容器
    docker stop dgcNginx2
    #1.2.删除当前镜像的相关容器
    docker rm dgcNginx2
    #1.3.删除镜像
    docker rmi dgcnginx_i:latest
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    4.4.镜像推送Docker官网仓库

    #1.需要在docker官网注册自己的账号
    #2.需要在自己账号下创建自己的仓库
    #3.先将镜像打上推送标签
    docker tag 现需要推送的镜像名称:版本 你的docker官网镜像仓库地址:版本(douglas1314/mynginx:v1.0)
    #4.在需要推送镜像的服务器上登录docker
    docker login
    #5.推送打好标签的镜像
    docker push 你的docker官网镜像仓库地址版本(douglas1314/mynginx:v1.0)
    #6.推送完镜像后退出
    docker logout
    #7.其它人可以通过命令拉取
    docker pull douglas1314/mynginx:v1.0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    5.Dockerfile

    5.1.什么事dockerfile

    Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。

    • 优点1、对于开发人员:可以为开发团队提供一个完全一致的开发环境。
    • 优点2、对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作。
    • 优点3、对于运维人员:在部署时,可以实现应用的无缝移植。

    5.2.常用命令

    命令作用
    FROM image_name.tag定义了使用那个基础镜像启动构建流程
    MAINTAINER user_name声明镜像的创建者
    ENV key value设置环境变量,(可以写多条)
    RUN command是Dockerfile的核心部分(可以写多条)
    ADD source_dir/filedest_dir/file将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
    COPY source_dir/filedest_dir/file和ADD相似,但是如果有压缩文件并不能解压
    WORKDIR path_dir设置工作目录

    5.3.案例:使用Dockerfile构建jdk1.8镜像

    #1.在宿主机上创建一个目录,如下:
    mkdir -p /usr/local/dockerjdk8
    #2.上传本地jdk8的安装包到dockerjdk8目录下
    #3.在dockerjdk8目录下创建一个文件:Dockerfile
    #4.编写Dockerfile文件脚本,内容如下:
    FROM centos:7
    MAINTAINER dgc    #表示:创建镜像的创建者
    WORKDIR /usr      #表示:设置当前目录
    RUN mkdir /usr/loacl/java #表示:创建一个java目录
    ADD jdk-8u144-linux-x64.tar.gz /usr/local/java  #表示:添加需要制作镜像的压缩包到虚拟机目录下且解压
    ENV JAVA_HOME /usr/local/java/jdk1.8.0_144      #表示:配置环境变量第一步
    ENV JRE_HOME $JAVA_HOME/jre                     #表示:配置环境变量第二步
    ENV CLASSPATH $JAVA_HOME/bin/dt.jar;$JAVA_HOME/lib/tools.jar;$JRE_HOME/lib;$CLASSPATH
    ENV PATH $JAVA_HOME/bin;$PATH
    #5.使用docker命令构建jdk1.8镜像
    docker build -t='jdk1.8' .         #表示: jdk1.8(镜像名称),点.:当前目录寻找Dockerfile脚本文件
    #6.构建完成镜像,可以使用docker images查看自己构建的镜像
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    6.Docker私有仓库

    6.1.私有仓库搭建与配置

    #1.拉取私有仓库镜像(docker的私有仓库也是一个镜像,直接拉取构建容器启动即可)
    docker pull registry
    #2.启动私有仓库容器
    docker run -di --name=registry -p 5000:5000 registry
    #3.通过浏览器访问如下地址,可以看到{"repositories":[]}表示私有仓库搭建成功并且为空
    http://宿主机IP:5000/v2/_catalog
    #4.修改daemon.json(文件地址在:/etc/docker/daemon.json)
    vi /etc/docker/daemon.json
    #4.1.添加如下内容:(配置:让docker信任这个私有仓库地址)
    {"insecure-registries":["宿主机IP:5000"]}
    #5.重启docker服务让配置生效
    systemctl restart docker
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    6.2.镜像上传至私有仓库

    #1.标记此镜像为私有仓库的镜像(打标签)
    docker tag jdk1.8 宿主机IP:5000/jdk1.8
    #2.上传标记的镜像
    docker push 宿主机IP:5000/jdk1.8
    
    • 1
    • 2
    • 3
    • 4

    6.3.拉取私有仓库镜像

    #1.不同服务器拉取私有仓库镜像,第一步:服务器续安装docker
    #2.修改daemon.json(文件地址在:/etc/docker/daemon.json)
    vi /etc/docker/daemon.json
    #2.1.添加如下内容:(配置:让docker信任这个私有仓库地址)
    {"insecure-registries":["宿主机IP:5000"]}
    #3.拉取私有仓库镜像
    docker pull 私有仓库地址IP:5000/镜像名称
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    7.补充常用命令

    #1.日志查看
    docker logs 容器名称(容器ID)
    #2.进入容器内部
    docker exec -it 容器ID /bin/bash
    #3.映射经常需要修改的文件(ro-代表只读,rw-读写)
    docker run -d --name=nginx -p 80:80 -v 宿主机目录(/data/html):容器目录(/usr/share/html):ro -v 宿主机目录(/data/conf/nginx.config):容器目录(/usr/nginx/nginx.conf):rw 容器名称(容器ID)
    #4.把容器指定目录东西复制到宿主机指定目录
    docker cp 容器名称(容器ID):容器文件目录(/etc/nginx/nginx.config) 宿主机文件目录(/data/config/nginx.config)
    #5.把宿主机的文件复制到容器目录中
    docker cp 宿主机文件目录(/data/config/nginx.config) 容器名称(容器ID):容器文件目录(/etc/nginx/nginx.config)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    8.Java的jar服务部署docker运行

    #1.使用idea打好jar包
    #2.项目根目录下创建Dockerfile文件
    #3.编辑Dockerfile脚本文件内容如下:
    #3.1.docker官网的jdk镜像
    FROM openjdk:8-jdk-slim
    #3.2.作者名称
    LABEL maintainer=douglas
    #3.3.将target文件夹中的jar包 拷贝到镜像根目录下命名为app.jar
    COPY target/*.jar /app.jar
    #3.4.启动命令
    ENTRYPOINT ["java","-jar","/app.jar"]
    #4.将target文件夹只含jar包拷贝到临时文件夹,再将Dockerfile文件拷贝到临时目录同级target目录
    #5.上传临时包至docker存在服务器上(目录自定义)
    #6.在临时目录下-执行docker构建镜像命令
    docker build -t 自定义镜像名称:版本(myjava-demo:v1.0) (标识点当前目录).
    #7.镜像构建完毕后创建容器
    docker run -d --name=myjava-demo -p 8080:8080 镜像名称(镜像ID)myjava-demo:v1.0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
  • 相关阅读:
    java面试题
    qt之模态窗口
    你能猜出这是什么代码吗
    OCR测试—文字密度和中英文
    Redis的GEO结构
    Java 程序执行
    笔试强训(一)
    内存四区的基本概念
    日期问题(蓝桥杯)
    刨根问底 Redis, 面试过程真好使
  • 原文地址:https://blog.csdn.net/qq_42445425/article/details/127975328