安装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 -H unix:// 后添加:
    --registry-mirror=https://registry.docker-cn.com
    
    1. 显示:
     ExecStart=/usr/bin/dockerd -H unix:// --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。
ENTRYPOINT ENTRYPOINT 配置容器启动后执行的命令,并且不可被 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. FROM java:8-alpine
    VOLUMN /tmp
    ADD target/*.jar app.jar
    RUN bash -c 'touch /app.jar'
    EXPOSE 8761
    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
    
  2. FROM java:8-alpine
    ADD target/*.jar app.jar
    EXPOSE 8761
    ENTRYPOINT ["java","-jar","/app.jar"]
    
  3. 构建镜像
    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 -H unix:// 在后面添加
    --insecure-registry 192.168.0.111:5000
    
    显示:
    ExecStart=/usr/bin/dockerd -H unix:// --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
    

客户端测试:

  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
    

猜你喜欢

转载自blog.csdn.net/Amor_Leo/article/details/84963324