安装Docker-ce以及Dockerfile和私有镜像仓库registry搭建

转载请表明出处 https://blog.csdn.net/Amor_Leo/article/details/84963324 谢谢

安装Docker-ce

  1. 更新yum源

    yum  -y  update
    
  2. 移除之前安装的docker

    yum -y remove docker docker-common docker-selinux docker-engine
    
  3. 安装所需的软件包

     yum install -y yum-utils device-mapper-persistent-data lvm2
    
  4. 添加镜像源

    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    
  5. 将软件包添加至本地缓存

    yum makecache fast
    
  6. 安装docker-ce

    yum install docker-ce -y
    
  7. 添加镜像加速器

    1. 去所在文件
    vim /usr/lib/systemd/system/docker.service
    
    1. 在 /usr/bin/dockerd 后添加:
    --registry-mirror=https://registry.docker-cn.com
    
    1. 显示:
     ExecStart=/usr/bin/dockerd  --registry-mirror=https://registry.docker-cn.com
    
  8. 重新加载配置文件

    systemctl daemon-reload
    
  9. 启动docker并开机自启

    systemctl start docker & systemctl enable docker    
    
  10. 查看docker是否启动

    ps -ef | grep dockerd
    

Docker基本命令

docker info                                                                     docker信息
docker --help
docker version                                                                  查看docker版本
docker --digests                                                                显示镜像的摘要信息
docker --digests --no-trunc                                                     显示镜像的完整信息
docker search  镜像名                                                            在GitHub查询   
docker pull 镜像名称:版本号 (没有版本号,就代表最新的版本)                           拉取镜像
docker images                                                                   查看已经拉去的镜像
docker images -a                                                                查看已经拉去的镜像
docker  image ls                                                                查看已经拉去的镜像:
docker images -q                                                                显示镜像的id
docker rmi 镜像名称:版本号                                                        删除镜像    
docker rmi -f 镜像名称:版本号 镜像名称:版本号 镜像名称:版本号...                     删除多个镜像
docker rmi -f $(docker images -qa)                                              删除所有镜像(谨慎使用)
docker pull 镜像名称:版本号                                                      拉取容器
docker  run  --name 容器名称 -p系统端口:容器端口  -d 镜像名称                        建立并启动一个容器
docker ps                                                                       查看当前正在运行的容器
docker ps -a 																	    查看所有运行过的容器
docker ps -l 																	    查看上一次运行的容器
docker ps -lq                                                                   显示容器编号
docker rm 容器名称                                                               删除已停止的容器  
docker rm -f   容器名                                                            强制删除已停止的容器
docker rm -f   $(docker images -q)                                 	        删除所有已停止的容器
docker start/restart 容器名称/容器ID  (容器名1  容器名2...)                         运行容器   
docker stop 容器名称/容器ID                                                       停止运行容器
docker kill 容器名称/容器ID                                        		强制停止运行容器 
docker inspect  容器名/ID                                                        查看容器内部细节
docker exec -it 容器名称 bash 													    进入容器
Ctrl+d                                                                     	退出容器
docker cp 容器名称:文件目录 (有空格)本地目录                                       从容器里面复制文件夹出来
docker cp 本地文件/文件夹 容器名:/文件目录                                          从外面复制到容器里面

docker镜像查询:

DockerHub

运行容器

运行一个容器:
docker run --name (给这个容器起名字,你不起也行,他会自动生成一个)\
          -p  (端口映射)\
          -v   (存储卷映射,挂载)\
          -e   (传递环境变量,在容器里面就可以获取到这个变量)  \
          -d    (后台运行,守护进程运行)  \
          镜像名称
通常 就是 docker  run  --name 容器名称 -p 系统端口:容器端口  -d  镜像名称
EG:  
docker pull tomcat   
docker run --name tomcat -p 8080:8080 -d tomcat

Dockerfile指令说明

指令说明用法
FROM指定base镜像两种用法:1.FROM image 指定基础image为该image的最后修改的版本 2.FROM image:tag 指定基础image为该image的一个tag版本
MAINTAINER设置镜像的作者,用于将image的制作者相关的信息写入到image中MAINTAINER name
RUN在容器中运行制定的命令,一般用于装软件两种格式1.RUN command (the command is run in a shell - /bin/sh -c) 2.RUN [“executable”, “param1”, “param2” … ] (exec form)
LABEL功能是为镜像指定标签LABEL key=value key=value key=value …
CMD设置container启动时执行的操作三种方式 1.CMD [“executable”,“param1”,“param2”] 2.CMD command param1 param2 (as a shell)3.当指定了ENTRYPOINT,那么使用下面的格式 CMD [“param1”,“param2”] (as default parameters to ENTRYPOINT) 指定的是一个可执行的脚本或者程序的路径,该指定的脚本或者程序将会以param1和param2作为参数执行。所以如果CMD指令使用上面的形式,那么Dockerfile中必须要有配套的ENTRYPOINT。
ENTRYPOINTENTRYPOINT 配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效。ENTRYPOINT [“executable”, “param1”, “param2”] (like an exec, the preferred form) ENTRYPOINT command param1 param2 (as a shell) 该指令的使用分为两种情况,一种是独自使用,另一种和CMD指令配合使用。当独自使用时,如果你还使用了CMD命令且CMD是一个完整的可执行的命令,那么CMD指令和ENTRYPOINT会互相覆盖只有最后一个CMD或者ENTRYPOINT有效。 CMD指令将不会被执行,只有ENTRYPOINT指令被执行 CMD echo “Hello, World!” ENTRYPOINT ls -l 另一种用法和CMD指令配合使用来指定ENTRYPOINT的默认参数,这时CMD指令不是一个完整的可执行命令,仅仅是参数部分;ENTRYPOINT指令只能使用JSON方式指定执行命令,而不能指定参数。FROM ubuntu CMD ["-l"] ENTRYPOINT ["/usr/bin/ls"]
EXPOSE设置指令,该指令会将容器中的端口映射成宿主机器中的某个端口。当你需要访问容器的时候,可以不是用容器的IP地址而是使用宿主机器的IP地址和映射后的端口。要完成整个操作需要两个步骤,首先在Dockerfile使用EXPOSE设置需要映射的容器端口,然后在运行容器的时候指定-p选项加上EXPOSE设置的端口,这样EXPOSE设置的端口号会被随机映射成宿主机器中的一个端口号。EXPOSE port [port…]
ENV用于设置环境变量设置了后,后续的RUN命令都可以使用,容器启动后,可以通过docker inspect查看这个环境变量,也可以通过在docker run --env key=value时设置或修改环境变量。假如你安装了JAVA程序,需要设置JAVA_HOME,那么可以在Dockerfile中这样写:ENV JAVA_HOME /path/to/java/dirent
ADD从src复制文件到容器的dest路径.如果是一个目录,那么会将该目录下的所有文件添加到容器中,不包括目录;如果文件是可识别的压缩格式,则docker会帮忙解压缩(注意压缩格式)ADD src dist ; src 是相对被构建的源目录的相对路径,可以是文件或目录的路径,也可以是一个远程的文件url; dist是容器的绝对路径
COPY是一个复制命令,COPY的src 只能是本地文件,其他用法与ADD一致1. COPY src… dest 2. COPY [“src”,… “dest”]
VOLUMN设置指令,使容器中的一个目录具有持久化存储数据的功能,该目录可以被容器本身使用,也可以共享给其他容器使用。我们知道容器使用的是AUFS,这种文件系统不能持久化数据,当容器关闭后,所有的更改都会丢失。当容器中的应用有持久化数据的需求时可以在Dockerfile中使用该指令。VOLUME [“mountpoint”] 例:FROM unbuntu VOLUMN [“/tmp/data”]运行通过该Dockerfile生成image的容器,/tmp/data目录中的数据在容器关闭后,里面的数据还存在。
WORKDIR可以多次切换(相当于cd命令),对RUN,CMD,ENTRYPOINT生效.例:# 在 /p1/p2 下执行 vim a.txt WORKDIR /p1 WORKDIR p2 RUN vim a.txt

制作Dockerfile镜像

  1. jar包与Dockerfile同级目录
    FROM java:8-alpine
    MAINTAINER "LHL <aomrlee412@gmail.com>" 
    VOLUMN /tmp
    ADD *.jar app.jar
    RUN bash -c 'touch /app.jar'
    EXPOSE 8761
    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
    
  2. jar包与Dockerfile同级目录
    FROM java:8-alpine
    MAINTAINER "LHL <aomrlee412@gmail.com>" 
    ADD *.jar app.jar
    EXPOSE 8761
    ENTRYPOINT ["java","-jar","/app.jar"]
    
  3. war包与Dockerfile同级目录
    FROM tomcat:alpine #基础镜像 java
    MAINTAINER "LHL <aomrlee412@gmail.com>" 
    ENV DIR_WEBAPP /usr/local/tomcat/webapps/ # 定义变量、后续会使用 ,具体路径可以先启动容器然后进入进行查看
    RUN rm -rf $DIR_WEBAPP/*   #删除webapp下所有文件,因为当前应用作为根应用
    ADD *.war $DIR_WEBAPP/ROOT.war  # 复制当前文件夹下的文件到镜像里面
    RUN apk add unzip
    RUN  unzip $DIR_WEBAPP/ROOT.war  -d  $DIR_WEBAPP/ROOT/	 
    CMD ["catalina.sh", "run"]
    
  4. 构建镜像
    docker build Dockerfilr所在的根目录  -t 镜像仓库名(镜像名):标签(版本)
    eg: docker build eureka/ -t eureka-service:1.0
    

Docker私有镜像仓库搭建

registry仓库服务端(192.168.0.111):

docker run -d -v /usr/registry:/var/lib/registry -p 5000:5000 --restart=always --privileged=true --name registry registry:latest
  • 查看仓库镜像命令
    curl -X GET http://127.0.0.1:5000/v2/_catalog 
    

客户端(192.168.0.131):

  1. 修改 /usr/lib/systemd/system/docker.service
    vim /usr/lib/systemd/system/docker.service
    
    找到 ExecStart=/usr/bin/dockerd 在后面添加
    --insecure-registry 192.168.0.111:5000
    
    显示:
    ExecStart=/usr/bin/dockerd --registry-mirror=https://registry.docker-cn.com  --insecure-registry 192.168.0.111:5000
    
  2. 重新加载配置文件
    systemctl daemon-reload
    
  3. 重新启动docker
    systemctl restart docker
    
  4. 查看docker是否启动
    ps -ef | grep dockerd
    
  5. 如果拉取不了镜像,重新启动虚拟机

客户端测试:

  1. 拉取dockerhub上的镜像
    docker pull tomcat
    
  2. 查看镜像id
    docker images
    
  3. 标签
    docker tag 6759d91a032b 192.168.0.111:5000/tomcat
    
  4. 推送到私有镜像仓库
    docker push 192.168.0.111:5000/tomcat
    
  5. 删除原镜像
    docker rmi 192.168.0.111:5000/tomcat tomcat
    
  6. 从私有镜像仓库拉取
    docker run --name tomcat001 -p 8080:8080 -idt 192.168.0.111:5000/tomcat
    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
docker-compose 是一个用于定义和运行多个容器的工具,而 Dockerfile 是用于构建 Docker 镜像的文件。在使用 docker-compose 运行多个容器时,可以通过 Dockerfile 来定义每个容器所需的镜像。 以下是使用 docker-compose 结合 Dockerfile 的基本步骤: 1. 创建一个新的目录,并在该目录中创建一个名为 `docker-compose.yml` 的文件,用于定义容器组成和配置。 2. 在同一目录中,为每个容器创建一个文件夹,并在每个文件夹中创建一个 Dockerfile,用于构建该容器的镜像。可以根据需要,在 Dockerfile 中指定所需的基础镜像、软件包安装、文件复制等操作。 3. 在 `docker-compose.yml` 文件中定义每个容器的配置。使用 `services` 关键字来定义每个服务,并指定该服务使用的镜像和其他配置项。可以参考下面的示例: ```yaml version: "3" services: web: build: ./web # 指定构建 web 服务的 Dockerfile 所在路径 ports: - "8000:8000" # 指定端口映射 volumes: - ./app:/app # 挂载本地目录到容器内部 db: image: mysql:latest environment: - MYSQL_ROOT_PASSWORD=secret - MYSQL_DATABASE=mydatabase ``` 在上述示例中,定义了两个服务:`web` 和 `db`。`web` 服务使用 `./web` 目录中的 Dockerfile 构建镜像,映射本地端口 8000 到容器内部的 8000 端口,并挂载 `./app` 目录到容器内部。 `db` 服务使用官方的 `mysql:latest` 镜像,并设置了环境变量。 4. 运行 `docker-compose up` 命令来启动容器。docker-compose 会根据 `docker-compose.yml` 文件中的配置构建并启动容器组。 使用 docker-compose 结合 Dockerfile 可以更方便地定义和管理多个相关的容器,提高开发和部署的效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值