• docker安装与使用


    1.docker定义

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,Docker则可以称为构建一次,到处运行。

    2.docker定义安装

    win7、win8 等需要利用 docker toolbox 来安装,国内可以使用阿里云的镜像来下载,下载地址:http://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/

    注:安装路径不可带有中文

    cmd输入docker-machine,查看是否安装成功 

    3.创建docker machine虚拟机 

     点击Git Bash,输入 notepad .bash_profile 创建和打开.bash_profile 配置文件;

    然后,在空白处输入镜像安装路径

    export MACHINE_STORAGE_PATH='E:docker'

    保存并关闭后,在E盘创建名为docker的文件夹,在其下创建名为cache的文件夹,将安装文件下的boot2docker.iso拷贝到该文件夹;

    在Git Bash中输入更改路径命令,使用docker的时候,会需要从docker的网站下载镜像文件,此处使用阿里云的加速器;

    阿里云开发者平台:https://dev.aliyun.com/search.html

    复制方框中的代码,然后修改为如下(根据自己盘符修改):

    现在就可以在Git Bash中运行了:

    docker-machine -s "E:docker"  create --engine-registry-mirror=https://4g2xbfwh.mirror.aliyuncs.com -d virtualbox default

    注:如果开启了电脑自带的虚拟机:Hyper-V,需要关闭,否则在安装时会报错,提示你禁用Hyper-V;查询是否禁用:

     

     

     虚拟机中出现如下界面:

     4.linux风格的Docker环境

    docker-machine ls    查看状态

    打开Docker Quickstart Terminal或者Git Bash,然后执行下面的命令:

    docker-machine start

    来启动docker machine。

     遇到问题1:VT-x/AMD-V 硬件加速在您的系统中不可用。您的 64-位虚拟机将无法检测到 64-位处理器,从而无法启动。

    处理步骤:

    1.重启电脑按F2 进入BIOS,找到CPU Configuration> Intel Virtualization Technology,设置为Enabled 。

    2 F10.保存退出,重启电脑,再次启动虚拟机。

    3 一切正常了。
    在虚拟机上查看ip地址
    ifconfig (命令)
    然后ping(本地的ip地址)(结束ctrl+c)
    ping (虚拟机上的ip地址)

    遇到问题2:双击 Docker Quickstart Terminal  之后提示找不到可执行的 .exe 文件

     右键Docker Quickstart Terminal  属性,发现目标exe路径不对

     处理步骤:

     可以将本地git的bash.exe路径复制并配置 Docker Quickstart Terminal的“属性”--》“目标” 处;

    然后再双击  Docker Quickstart Terminal就可以直接运行了;

    5.将虚拟机中的默认用户docker切换至root用户

    sudo -i

     6.编写Dockerfile文件

    # 第一行必须指定基础容器,建议使用aipln类型的小容器
    FROM openjdk:8-jdk-alpine
    
    # 维护者信息(可选)
    MAINTAINER cjq 978491323@qq.com
    
    # LABEL (可选) 标签信息(自定义信息,多标签放一行)
    LABEL app.maintainer=cjq
    LABEL app.version="1.0" app.host='cjq' description="docker镜像构建测试"
    
    # ENV  (可选)环境变量(指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持 
    #ENV JAVA_HOME /usr/bin
    #ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH
    
    # USER (可选) 指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户,前面的RUN 不受影响
    # RUN groupadd -r postgres && useradd -r -g postgres postgres 
    # USER postgres
    RUN mkdir /cjq
    # WORKDIT 后续的 RUN、CMD、ENTRYPOINT 指令配置容器内的工作目录
    WORKDIR /cjq
    
    # ADD/COPY 将外部文件copy到容器中。区别是ADD可以使用URL,还可以是tar
    # COPY只能使用dockerfile所在目录
    # ADD <src> <dest>
    # COPY <src> <dest>
    COPY /cjq.jar /cjq/cjq.jar
    
    # RUN 镜像的操作指令
    # RUN <command> [“executable”, “param1”, “param2”]。
    #RUN echo “deb http://archive.ubuntu.com/ubuntu/ raring main universe” >> /etc/apt/sources.list
    #RUN apt-get update && apt-get install -y nginx
    #RUN mkdir /home/cjq
    #RUN echo “
    daemon off;” >> /etc/nginx/nginx.conf
    EXPOSE 22 80 8443 8080
    #CMD ["java","-jar","/cjq.jar"]
    # EXPOSE 容器启动后需要暴露的端口
    
    # VOLUME 本地或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。
    #VOLUME ["/tmp"]
    #VOLUME ["/tmp", "/other/path/"]
    
    
    # ENTRYPOINT  容器启动后执行命令,不会被docker run提供的参数覆盖,只能有一个ENTRYPOINT,
    # 多个ENTRYPOINT,以最后一个为准
    #ENTRYPOINT [“executable”, “param1”, “param2”]
    #ENTRYPOINT command param param2
    #ENTRYPOINT echo "hello-world"
    ENTRYPOINT ["java","-jar","cjq.jar"]
    
    
    # 容器启动时执行指令,每个 Dockerfile 只能有一条 CMD 命令
    #CMD [“executable”, “param1”, “param2”] 使用 exec 执行,推荐方式。
    #CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用。
    #CMD [“param1”, “param2”] 提供给 ENTRYPOINT 的默认参数。
    #CMD /usr/sbin/nginx
    
    
    # ONBUILD 配置当所创建的镜像作为其他新创建镜像的基础镜像时,所执行的操作指令。例如,Dockerfile 使用如下的内容创建了镜像 image-A。-- 很少使用
    
    # ONBUILD ADD . /app/src
    # ONBUILD RUN /usr/local/bin/python-build –dir /app/src
    View Code

    介绍一下:

    • FROM :表示使用 Jdk8 环境 为基础镜像,如果镜像不是本地的会从 DockerHub 进行下载
    • MAINTAINER :指定维护者的信息
    • VOLUME :VOLUME 指向了一个/tmp的目录,由于 Spring Boot 使用内置的Tomcat容器,Tomcat 默认使用/tmp作为工作目录。这个命令的效果是:在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
    • ADD :拷贝文件并且重命名(前面是上传jar包的名字,后面是重命名)
    • RUN :每条run指令在当前基础镜像执行,并且提交新镜像
    • ENTRYPOINT :为了缩短 Tomcat 的启动时间,添加java.security.egd的系统属性指向/dev/urandom作为 ENTRYPOINT

    7.创建docker容器

    注意:后面末尾有一个空格和一个“.”,cjq是创建的镜像的名字,“.”表示当前目录

    docker build -t cjq .

     8.查看生成的容器

    docker images

    9.创建容器并运行jar包

    docker run -d -p 8080:8080 --name cjq cjq

    -d代表后台运行
    -p 8082:8082 端口映射,后一个8082是镜像的端口
    第一个lost_and_found代表是给容器的名字
    第二个lost_and_found是上面创建镜像的名字
    [root@VM_0_15_centos springboot]# docker run -d -p 8080:8080 --name lost_and_found lost_and_found

    10.查看镜像测试

    [root@VM_0_15_centos springboot]# docker ps -a

    访问项目通过ip地址:端口号访问成功~

    赠以上linux docker操作文档一份

    1、解压
    tar -xvf docker-18.06.1-ce.tgz
    
    2、将解压出来的docker文件内容移动到 /usr/bin/ 目录下
    cp docker/* /usr/bin/   
    
    3、将docker注册为service
    vim /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
    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
     
     
     
     
     
     
     4、启动
    chmod +x /etc/systemd/system/docker.service #添加文件权限并启动docker
    systemctl daemon-reload #重载unit配置文件
    systemctl start docker #启动Docker
    systemctl enable docker.service #设置开机自启
    
    5、验证
    systemctl status docker #查看Docker状态
    docker -v #查看Docker版本
    
    6.创建Dockerfile文件(创建镜像必需)
    
    7.通过Dockerfile创建镜像
    命令中的lost_and_found是镜像名的意思,此行命令最后有一个点,表示使用当前上下文中的 Dockerfile 文件
    [root@VM_0_15_centos springboot]# docker build -t lost_and_found .
    运行命令后,看见 Successfully built 3cc4e76442c7则代表创建镜像成功。
    
    8.查看docker镜像
    
    [root@VM_0_15_centos springboot]# docker images
    
    9.运行jar包
    
    -d代表后台运行
    -p 8082:8082 端口映射,后一个8082是镜像的端口
    第一个lost_and_found代表是给容器的名字
    第二个lost_and_found是上面创建镜像的名字
    [root@VM_0_15_centos springboot]# docker run -d -p  8080:8080 --name lost_and_found lost_and_found
    
    
    10.查看容器
    [root@VM_0_15_centos springboot]# docker ps -a
    
    访问项目通过ip地址:端口号访问成功~
    
    
    11.停止所有镜像
    docker stop $(docker ps -a -q)
    
    启动镜像: docker start 镜像id
    
    12.删除所有镜像
    docker  rm $(docker ps -a -q)
    
    13.查看日志
    docker logs --tail  300 -f  cjq
    
    14.重复启动
    docker run -d --restart=always -p 8080:8080 --name cjq cjq  

    docker-compose命令的使用

    网上下载docker-compose-Linux-x86_64

    将docker-compose-Linux-x86_64重命名为docker-compose 

    上传文件docker-compose 到/usr/local/bin目录下

    修改权限

    命令: chmod +x /usr/local/bin/docker-compose

    查看docker-compose版本:docker-compose version

    在docker-compose.yml所在文件夹目录下运行docker-compose up -d           启动容器  可启动多个image   类似于多次Dockerfile配置文件

    附录:docker-compose.yml文件

     docker进入容器和退出容器

    进入:docker exec -it 容器id /bin/bash
    退出:ctrl+d

  • 相关阅读:
    【cf1247E】E. Rock Is Push(dp+二分)
    【cf1245F】F. Daniel and Spring Cleaning(数位dp)
    【cf1243D】D.0-1 MST(set+均摊复杂度分析)
    [CF1201D] Treasure Hunting
    [CF1211C] Ice Cream
    [CF1213E] Two Small Strings
    [CF1219G] Harvester
    [CF1223D] Sequence Sorting
    [CF1231E] Middle-Out
    [CF1244E] Minimizing Difference
  • 原文地址:https://www.cnblogs.com/1234cjq/p/11670506.html
Copyright © 2020-2023  润新知