docker私有化使用

2024-11-11 17:05:30 阅读:13 编辑

私有化部署镜像

https://yeasy.gitbook.io/docker_practice/repository/registry

  1. 先创建/opt/data/registry目录
  2. 5100端口要开放
docker run -d \
    -p 5100:5000 \
    -v /opt/data/registry:/var/lib/registry \
    --name docker_registry \
    registry

demo举例

https://github.com/xiaotiandada/docker-nodejs

首先需要 Docker Node.js

1.创建一个目录并且使用npm创建一个package.json文件添加Express框架

mkdir docker-nodejs
cd docker-nodejs
npm init
npm install -save express

2.创建index.js文件

touch index.js

3.打开编辑器,写入简单的代码

const express = require('express')
const app = express()

app.get('/',function(req, res){
    res.send('hello world')
})

app.listen(8081, function(){
    console.log(`app listening on port 8081`)
})

4.端口为8081 然后node index.js 运行

node index.js

可以打开 http://localhost:8081 测试是否正常工作

5.添加Docker文件

touch Dockerfile

Dockerfile只是一个名为'Dockerfile'的纯文本文件,没有扩展名

6.编辑Docker文件(Dockerfile)

FROM node:18.19.0-alpine
WORKDIR /app
COPY package.json ./
RUN npm config set registry https://registry.npmmirror.com
RUN npm install
COPY index.js ./
CMD node index.js
EXPOSE 8081

第一行Docker使用一个Docker镜像作为我们创建的镜像的模板 使用的是Node.js的官方Docker镜像

FROM node:18.19.0 --1.1GB

FROM node:18.19.0-alpine --140MB

第二行应用程序代码在Docker容器内的位置设置工作目录。

第3行应用程序代码复制package.json

第4行应用程序代码 设置国内镜像

第5行应用程序代码 安装任何软件包依赖关系

第6行应用程序代码 我们告诉Docker将我们的本地文件复制到容器的工作目录中

在第7行,我们告诉docker通过使用node运行我们的index.js

最后,在第8行中,我们设置了Docker在容器运行时将公开的端口8082。

注:Node.js应用程序使用端口8081,但在容器运行时将使用Docker容器内的该端口。

7.构建Docker镜像

构建Docker镜像使用带-t参数的docker build命令来标记名为docker-nodejs的镜像,并提供Dockerfile所在目录路径的引用,它在同一个目录中,所以我用一个点

docker build -t docker-nodejs .

名字要小写 不能忘记点!!!

8.运行Docker容器

docker run -d -p 8082:8081 docker-nodejs

我们使用docker run命令,“p”参数,以映射Docker容器和Node应用使用的端口。Dockerfile中,我们公开了端口8082,但在我们的代码中Node正在使用端口8081

Docker会显示来自Node的响应,表示该应用程序正在端口8081上运行,打开8082端口 http://localhost:8082

9.上传镜像

docker tag docker-nodejs:latest 127.0.0.1:5100/docker-nodejs:2.0
docker push 127.0.0.1:5100/docker-nodejs:2.0

其它站使用该镜像

先配置docker源

http://blog.xmyunce.com/posts/660

拉取镜像

docker pull 123.249.34.10:5100/docker-nodejs:2.0

运行容器

docker run -d -p 8081:8081  --name docker_nodejs 123.249.34.10:5100/docker-nodejs:2.0

测试

curl http://127.0.0.1:8081

docker 平滑更新

https://blog.51cto.com/u_16213466/11950005

服务端build.sh

version=$1
docker build -t docker-nodejs .
docker tag docker-nodejs:latest 127.0.0.1:5100/docker-nodejs:${version}
docker push 127.0.0.1:5100/docker-nodejs:${version}

客户端更新update_docker_node.sh

version=$1
docker pull 123.249.34.10:5100/docker-nodejs:${version}
docker stop docker_nodejs
docker rm docker_nodejs
docker run -d -p 8081:8081 --name docker_nodejs 123.249.34.10:5100/docker-nodejs:${version}

进入容器内部

//进入Alpine 容器内部
docker exec -it docker_nodejs sh

//进入Ubuntu 容器内部
docker exec -it docker_nodejs /bin/bash