docker

363 阅读3分钟

安装docker

登录服务器

ssh root@ip...

更新依赖包

apt-get或者yum update

安装docker

curl -sSL https://get.daocloud.io/docker | sh

镜像加速:国内镜像和七牛云

vi /etc/docker/daemon.json
{ 
"registry-mirrors": [ 
    "https://dockerhub.azk8s.cn", 
    "https://reg-mirror.qiniu.com" 
    ] 
}

启动docker

sudo systemctl enable docker
sudo systemctl start docker

测试docker,是否可以正常运行

docker run hello-world

如图,成功。

发布项目

下载nginx镜像

// 拉取docker官方的镜像,面向docker的只读模板
docker pull nginx 

查看安装结果

docker images nginx

写入测试文件

mkdir www
echo 'hello docker!!' >> www/index.html

使用docker发布

// nginx默认的服务端口是80,把虚拟机的80端口映射到8000端口
docker run -p 8000:80 -v $PWD/www:/usr/share/nginx/html nginx
// 后台启动
docker run -p 8000:80 -v $PWD/www:/usr/share/nginx/html -d nginx

端口占用,换了个端口

查看docker进程启动状态

docker ps
docker ps -a // 查看全部

停止、启用进程 镜像的id

docker stop uuid
docker start uuid

伪终端,进入某个进程,每个进程都相当于是一个小的linux服务器。

docker exec -it uuid /bin/bash

如图:

删除镜像,要先停止镜像

docker rm uuid

定制镜像

登录服务器,创建文件夹 source/docker/nginx

vi DockerFile
FROM nginx:latest
RUN echo '<h1>Hello, dockerFile ! </h1>' > /usr/share/nginx/html/index.html

如图:

定制镜像

// 定制一个版本是kaixin的nginx镜像
docker build -t nginx:kaixin .

运行镜像

docker run -p 9000:80 nginx:kaixin

如图,一个简单的镜像,就完成了~

定制node.js镜像

下载node

yum install -y nodejs
npm init -y
npm install koa -S

创建执行文件

vi app.js
const Koa = require('koa')
const app = new Koa()
app.use(ctx => {
    ctx.body = 'Hello Docker/node'
})
app.listen(3000, () => {
    console.log('app started at http://localhost:3000/')
})

定制镜像

vim DockerFile
1.node 10版本,比较稳定,alpine是经典的linux系统,体积小
2.把宿主机的当前目录添加到 /app下。比如会把app.js、package.json 添加到这个目录下
3.WORKDIR 相当于cd

FROM node:10-alpine
ADD . /app
WORKDIR /app
RUN npm install
EXPOSE 3000
CMD ["node", "app.js"]

定制镜像

docker build -t mynode .

运行镜像

docker run -p 3000:3000 -d mynode

定制pm2镜像

将目录下的node拷贝一份,pm2和node相似

cp -r node pm2

添加pm2描述文件

vi process.yml
// script 执行的文件、2个进程、监听、设置node环境变量
apps:
- script : app.js
   instances: 2
   watch : true
   env :
   	NODE_ENV: production

编辑Dockerfeil

// 使用pm2的官方镜像
FROM keymetrics/pm2:latest-alpine
WORKDIR /usr/src/app
ADD . /usr/src/app
RUN npm config set registry https://registry.npm.taobao.org/ && \
npm i
EXPOSE 3000
#pm2在docker中使用命令为pm2-docker
CMD ["pm2-runtime", "start", "process.yml"]

定制镜像

docker build -t mypm2 .
docker run -p 3000:3000 -d mypm2

启动mongo、mongo-express镜像

安装docker-compose

yum install docker-compose

添加描述文件

// 创建mongo文件夹和docker启动文件
vi mongo/docker-compose.yml
// 服务需要加载几个镜像
version: '3.1'
services:
  mongo:
    image: mongo
    restart: always
    ports:
      - 27017:27017
  mongo-express:
    image: mongo-express
    restart: always
    ports:
      - 8000:8081

执行,启动配置中的两个镜像

docker-compose up

查看已启用的镜像

docker-compose ps

停止开启镜像

docker-compose down

访问 ip:8000

使用vscode发布到服务器

打开vscode,下载插件deploy 配置.vscode/settings.josn

{
    "deploy": {
        "packages": [{
            "files": [
                "**/*",
            ],
            "exclude": [ //  忽略的文件 
                "node_modules/**",
                ".git/**",
                ".vscode/**",
                "**/node_modules/**",
            ],
            "deployOnSave": false,
            "interactiveAuth": true,
        }],
        "targets": [{
            "type": "sftp",
            "name": "tengxunServer", // name随意写
            "dir": "/root/source/docker_ci", // 要发布的服务器地址
            "host": "106.54.179.243",
            "port": 22,
            "user": "root",
            "privateKey": "/Users/kaixinliu/.ssh/id_rsa", //本地电脑的私钥
            "password": ""// 本地有私钥,可以不配置密码。要不然报错
        }],
    },
}

下图就是本地私钥没有匹配上密码

最简单是在settings.josn加上密码:
点击nginx/conf.d/docker.conf,deploy。成功后就看到服务器多了个文件 添加前端vue项目,并将dist文件deploy上去,启动服务

docker-compose up

然后报错...

原因是可能服务器默认执行的是conf.d/default.conf,而不是conf.d/docker.conf。我在同级目录复制了一份改名为default.conf,就好了

重新启动,可能为访问不到8091端口。访问不到就是阿里云或者腾讯云添加访问端口。

webhock

github项目找到 sitting->Webhooks / Add webhook

github项目的每次操作,都可以想指定的服务器发送一次http请求

未完,待续~~~