美文网首页
【docker】教程 常用命令 基础使用

【docker】教程 常用命令 基础使用

作者: 植富宝 | 来源:发表于2019-02-27 19:39 被阅读0次

    ==1. 概念==

    1.1 Docker镜像 - Docker Images

    容器运行时的只读模板,操作系统 + 软件运行环境 + 用户程序
    class User {
        private String username;
        private Integer age;
    }
    

    1.2 Docker 容器 - Docker Containers

    容器包含了某个应用运行所需要的全部环境
    
    User user = new User();
    

    1.3 Docker 仓库 - Docker Registeries

    用来保存镜像,有公有和私有仓库,比如Maven的中央仓库和本地私服
    [图片上传失败...(image-e74e3-1551267580996)]
    

    1.4 Tips

    Docker Images : Java Class
    Docker Containers : Java Object
    通过类创建对象,通过镜像创建容器
    

    ==2. 常见命令==

    1.搜索镜像 : docker search rabbitmq:management
    2.查看系统镜像 : docker images
    3.拉取镜像 : docker pull rabbitmq:management
        rabbitmq:management是具体镜像名称(格式 REPOSITORY:TAG)
        REPOSITORY : 表示镜像的仓库源
        TAG : 镜像的标签
    4.运行一个容器 : 
        docker run -d -p 5672:5672 -p 15672:15672 --name beebee_mq rabbitmq:management
        docker run -d -p 6379:6379 --name "xd_redis" 4e8db158f18d
        docker run -it beebee-api
        docker run -d -p 8088:8088 -itv /software/docker/hadoop1/:/tmp --name hadoop1 id/name
        
        docker run : 运行一个容器
        -i : 以交互模式运行容器,通常与 -t 同时使用
        -t : 为容器重新分配一个伪输入终端,通常与 -i 同时使用
        -v : 给容器挂载存储卷,挂载到容器的某个目录
        -d : 后台运行
        -p : 端口映射
        rabbitmq:management(格式 REPOSITORY:TAG),如果不指定tag,默认使用最新的
        4e8db158f18d : IMAGE-ID
        --name : 容器名称
    5.查看当前运行的容器 : docker ps
    6.检查容器内部信息 : docker inspect id/name
    7.删除镜像 : docker rmi 镜像名称
        -f : 强制删除
    8.删除某个容器 : docker rm id/name(容器必须是停止状态)
    9.停止某个容器 : docker stop id/name
    10.启动某个容器 : docker start id/name
    11.查看启动日志 : docker logs -f id/name
    12.在容器里面进行操作 : docker exec -it nginx /bin/bash
    13.构建镜像 : docker build -t eureka-server .
    14.查看所有的容器 : docker ps -a
    15.复制Linux到docker-文件 : docker cp nginx.conf my-nginx:/etc/nginx/nginx.conf
    16.复制docker到Linux-文件夹 : docker cp my-nginx:/etc/nginx /etc/
    

    ==3. 高级命令==

    1.查看所有的容器 : docker ps -a
    2.进入docker容器 : docker exec -it web-nginx /bin/bash , docker attach web-nginx
    3.停止守护式容器 : docker stop web-nginx , docker kill web-nginx
    4.查看容器详情 : docker inspect id/name
    5.查看容器端口映射 : docker port web-nginx
    6.容器IP地址 : docker inspect  id/name --> NetworkSettings --> IPAddress
    7.查看docker存储位置和驱动 : docker info
    8.停止所有的容器 : docker stop $(docker ps -a -q)
    9.删除所有未运行的容器 : docker rm $(docker ps -a -q)
    10.删除所有未打tag的镜像 : docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
    11.删除所有镜像 : docker rmi $(docker images -q)
    12.docker network
        docker network create : 创建
        docker network connect
        docker network ls : 列出
        docker network rm : 删除
        docker network disconnect
        docker network inspect
    

    ==4. 启动nginx==

    1. 启动-映射web文件夹 : docker run -dit -p 80:80 -p 443:443 -v /usr/share/nginx/html:/usr/share/nginx/html —name ng 42b4762643dc
    2. 复制docker中nginx配置到Linux : docker cp ng:/etc/nginx /etc
    3. 停止docker : docker stop ng
    4. 重启docker : docker start ng
    5. 启动-映射配置文件夹 : docker run -dit -p 80:80 -p 443:443 -v /usr/share/nginx/html:/usr/share/nginx/html -v /etc/nginx:/etc/nginx —name ng 42b4762643dc
    

    ==5. 将项目打包为Docker镜像==

    5.1 添加pom依赖

    <properties>
        <docker.image.prefix>beebee</docker.image.prefix>
    </properties>
    <build>
        <finalName>docker-demo</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.3.6</version>
                <configuration>
                    <repository>${docker.image.prefix}/${project.artifactId}</repository>
                    <buildArgs>
                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                </configuration>
            </plugin>
        </plugins>
    </build>
    

    5.2 根目录,新建Dockerfile

    FROM openjdk:8-jdk-alpine
    VOLUME /tmp
    ARG JAR_FILE
    COPY ${JAR_FILE} app.jar
    ENTRYPOINT ["java","-jar","/app.jar"]
    

    5.3 构建镜像

    mvn install -DskipTests dockerfile:build
    

    5.4 推送镜像到仓库

    登录仓库 : docker login --username=anson.zhifu@gmail.com registry.cn-beijing.aliyuncs.com
    镜像打标签 : docker tag [ImageId] registry.cn-beijing.aliyuncs.com/beebee/51taqu:[镜像版本号]
    推送镜像 : docker push registry.cn-beijing.aliyuncs.com/beebee/51taqu:[镜像版本号]
    拉取镜像 : docker pull registry.cn-beijing.aliyuncs.com/beebee/51taqu:[镜像版本号]
    阿里云仓库 : https://cr.console.aliyun.com
    

    ==6.Dockerfile==

    1-FORM:基于什么镜像,FROM <image>或FROM <image>:<tag>
    2-MAINTAINER:维护者信息,MAINTAINER <name>
    3-RUN:在基础镜像上执行,搭建环境,RUN <command> 或 RUN ["executable", "param1", "param2"]
    4-CMD:启动容器时执行的命令,只能有一条
        • CMD ["executable","param1","param2"] 使用 exec 执行,推荐方式;
        • CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用;
        • CMD ["param1","param2"] 提供给 ENTRYPOINT 的默认参数;
    5-EXPOSE:容器暴露的端口号,EXPOSE <port> [<port>...]
    6-ENV:指定环境变量,会被后续的RUN指令使用,并在容器运行时保持
    7-ADD:就是复制文件到容器中,ADD <src> <dest>,<src>:可以是一个本地文件,可以是URL,tar文件会自动解压
    8-COPY:单纯的复制本地文件到容器中,COPY <src> <dest>
    9-ENTRYPOINT:容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖,只能有一条命令
        • ENTRYPOINT ["executable", "param1", "param2"]
        • ENTRYPOINT command param1 param2(shell中执行)。
    10-VOLUME:创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等,VOLUME ["/data"]
    11-USER:容器运行时的用户名,USER daemon
    12-WORKDIR:切换目录,为后续的 RUN、CMD、ENTRYPOINT 指令配置工作目录
    13-ONBUILD:配置当所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令,ONBUILD [INSTRUCTION]
    
    # 1 基础镜像
    FROM centos:centos6
    
    # 2 维护者
    MAINTAINER anson.zhang
    
    # 3 安装基本命令
    RUN yum -y update
    RUN yum -y groupinstall "Security Tools"
    RUN yum -y groupinstall "Debugging Tools"
    RUN yum -y groupinstall "Compatibility libraries"
    RUN yum -y groupinstall "Development tools"
    RUN yum -y groupinstall "Smart card support"
    RUN yum -y groupinstall "Base"
    RUN yum -y install openssh-clients
    RUN yum -y install openssh-server
    RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    
    # 4 安装jdk
    COPY jdk-8u144-linux-x64.tar.gz /usr/local/
    WORKDIR /usr/local/
    RUN tar -xvf ./jdk-8u144-linux-x64.tar.gz
    RUN mv ./jdk1.8.0_144 jdk
    
    # 4 安装hadoop
    COPY hadoop-2.6.1.tar.gz /usr/local/
    RUN tar -xvf ./hadoop-2.6.1.tar.gz
    RUN mv ./hadoop-2.6.1 hadoop
    
    # 5 设置jdk环境变量
    ENV PATH /usr/local/jdk/bin:/usr/local/hadoop/bin:$PATH
    
    # 6 设置挂载点,或共享卷
    VOLUME ["/usr/local/data"]
    
    # 7 使用root登录Linux
    # USER root
    
    # 8 暴露端口
    EXPOSE 22 80 8080 8090 
    
    # 9 启动时执行的命令
    # CMD ["/bin/bash"]
    
    # 映射文件夹,设置静态ip,映射端口,系统时间
    # docker run --name hadoop1 --net myIp --ip 172.17.2.1 -itv /software/docker/hadoop1/:/usr/local centos:centos6 /bin/bash
    

    ==7. 项目构建部署流程==

    1. mvn clean compile install -DskipTests
    2. docker build -t ...
    3. docker images
    4. docker tag ...
    5. docker push ...
    6. docker pull ...
    7. docker images
    8. docker ps
    9. docker stop ...
    10. docker rm ...
    11. docker run ...
    

    ==8. 常见问题==

    8.1 浏览器访问不了docker内的接口

    1.docker启动时,docker容器端口要和Java应用端口一致
    2.访问时,要用http://localhost,http://127.0.0.1,http://59.110.238.225,https://58taqu.com,不要用http://192.168.1.48
    3.排查 : 查看日志,curl,端口开放,防火墙
    

    8.2 配置中心访问出错

    [图片上传失败...(image-1c358f-1551267580996)]

    所有的微服务中添加以下配置
    eureka:
      client:
        serviceUrl:
          defaultZone: http://localhost:8761/eureka/
      instance:
        instance-id: ${spring.cloud.client.ip-address}:${server.port}
        prefer-ip-address: true
    

    8.3 注意事项

    1.application.yml中的经常变动的变量不要写死,比如用${mysql.address}动态取值,启动命令docker run -it user-service:latest --mysql.address=192.168.1.7
    2.写完Dockerfile后,写build.sh,方便以后构建,mvn ... 和 docker build ... 和 docker push ...
    

    8.4 错误

    1. 这个错误用此命令:systemctl restart docker
    
    image

    相关文章

      网友评论

          本文标题:【docker】教程 常用命令 基础使用

          本文链接:https://www.haomeiwen.com/subject/qlhquqtx.html