转载请表明出处 https://blog.csdn.net/Amor_Leo/article/details/84963324 谢谢
安装Docker-ce私有镜像仓库registry搭建
安装Docker-ce
-
更新yum源
yum -y update
-
移除之前安装的docker
yum -y remove docker docker-common docker-selinux docker-engine
-
安装所需的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
-
添加镜像源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
-
将软件包添加至本地缓存
yum makecache fast
-
安装docker-ce
yum install docker-ce -y
-
添加镜像加速器
- 去所在文件
vim /usr/lib/systemd/system/docker.service
- 在 /usr/bin/dockerd 后添加:
--registry-mirror=https://registry.docker-cn.com
- 显示:
ExecStart=/usr/bin/dockerd --registry-mirror=https://registry.docker-cn.com
-
重新加载配置文件
systemctl daemon-reload
-
启动docker并开机自启
systemctl start docker & systemctl enable docker
-
查看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镜像查询:
运行容器
运行一个容器:
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镜像
- 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"]
- jar包与Dockerfile同级目录
FROM java:8-alpine MAINTAINER "LHL <aomrlee412@gmail.com>" ADD *.jar app.jar EXPOSE 8761 ENTRYPOINT ["java","-jar","/app.jar"]
- 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"]
- 构建镜像
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):
- 修改 /usr/lib/systemd/system/docker.service
找到 ExecStart=/usr/bin/dockerd 在后面添加vim /usr/lib/systemd/system/docker.service
显示:--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
- 重新加载配置文件
systemctl daemon-reload
- 重新启动docker
systemctl restart docker
- 查看docker是否启动
ps -ef | grep dockerd
- 如果拉取不了镜像,重新启动虚拟机
客户端测试:
- 拉取dockerhub上的镜像
docker pull tomcat
- 查看镜像id
docker images
- 标签
docker tag 6759d91a032b 192.168.0.111:5000/tomcat
- 推送到私有镜像仓库
docker push 192.168.0.111:5000/tomcat
- 删除原镜像
docker rmi 192.168.0.111:5000/tomcat tomcat
- 从私有镜像仓库拉取
docker run --name tomcat001 -p 8080:8080 -idt 192.168.0.111:5000/tomcat