部署笔记


本文主要记录本人在部署遇到的一些问题以及解决思路做的一些记录,笔记由摘抄+自我理解组成

docker

构建镜像

注意后面有个.

docker build -t 镜像名 .
例如:
docker build -t docker_ai .

挂载镜像

docker run -it --name 镜像名 -p 宿主机端口:虚拟机端口 -v 宿主机绝对路径:镜像内容器路径
例如:
docker run -u root -it --name flask -p 5002:5002 -v /home/project/ai_server:/code docker_ai
docker run

启动容器

docker start id或者name
-a  attach
-i  进入交互
例如: docker start flask -i

停止容器

docker stop id或者name
例如: docker stop flask

复制文件进入容器

docker cp xx文件 容器id:容器路径

打包当前容器成为新镜像

Usage:  docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
 
Create a new image from a container's changes
Options:
  -a, --author string    Author (e.g., "John Hannibal Smith <hannibal@a-team.com>")
  -c, --change list      Apply Dockerfile instruction to the created image
      --help             Print usage
  -m, --message string   Commit message
  -p, --pause            Pause container during commit (default true)

例如

docker commit  cc432d1f6b13 new_anaconda

进入容器

# 进入容器内部
docker exec -it 容器id /bin/bash

# 进入容器的print
docker attach

删除容器或镜像

删除容器

docker rm 容器id

删除镜像
docker rmi 镜像id

保存/加载镜像

若是只想备份images,使用save、load即可。
save是依据镜像来的,所以导入时可以完整保留下每一层layer信息

  • save 保存镜像
    save命令是从镜像(images)中导出
    docker save [options] images [images…]

      docker save -o nginx.tar nginx:latest
      或者
      docker save > nginx.tar nginx:latest
      其中-o和>表示输出到文件,nginx.tar为目标文件,nginx:latest是源镜像名(name:tag)
    
  • load 加载镜像
    docker load [options]

      docker load -i nginx.tar
      或
      docker load < nginx.tar
      其中-i和<表示从文件输入。会成功导入镜像及相关元数据,包括tag信息
    

保存/加载容器

export导出的文件再import回去时,无法保留镜像所有历史(即每一层layer信息,不熟悉的可以去看Dockerfile),不能进行回滚操作

  • export 导出容器
    export命令是从容器(container)中导出tar文件
    docker export [options] container

      docker export -o nginx-test.tar nginx-test
      其中-o表示输出到文件,nginx-test.tar为目标文件,nginx-test是源容器名(name)
    
  • import 导入容器
    docker import [options] file|URL|- [REPOSITORY[:TAG]]

      docker import nginx-test.tar nginx:imp
      或
      cat nginx-test.tar | docker import - nginx:imp
    

docker 容器运行出现permission denied

容器使用docker run -v hostvolume:dockervolume,采用这种方式运行如果出现permission denied是因为宿主机的当前运行用户和docker容器里面的运行用户不一致导致访问权限问题。

解决办法:

1、使docker里面的运行用户和宿主一样,运行命令 docker run -u root,docker u参数可以指点以哪个用户运行。

2、在宿主机里面创建和容器默认用户一样的,然后把要映射的文件目录使用chown -R user:group方式修改为docker例的用户。

注意:这里需要查看docker镜像里的制作文件dockerfile。比如EMQ容器制作就如下添加用户

RUN adduser -D -u 1000 emqtt

Docker Swarm 分布式集群

搭建教程
swarm命令大全

master配置

在Master上安装Docker

apt-get update
apt-get install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
apt-get update
apt-get install -y docker-ce

创建Manager节点
一个Docker Swarm集群需要Manager节点。现在初始化Master服务器,作为集群的Manager节点。运行下面一条命令。

#端口默认2377
docker swarm init --advertise-addr 192.168.1.138

这个返回结果中,给出了一条命令,这个命令可以

docker swarm join --token SWMTKN-1-0hqsajb64iynkg8ocp8uruktii5esuo4qiaxmqw2pddnkls9av-dfj7nf1x3vr5qcj4cqiusu4pv 45.77.138.242:2377

编写Dockerfile

构建镜像
编写完成Dockerfile以后,执行下面的命令,开始构建我们自己的镜像:

docker build -t localhost:8003/spider .

这里需要特别注意,由于我们要把这个镜像上传到私有源供Slave服务器上面的从节点下载,所以镜像的命名方式需要满足localhost:8003/自定义名字:版本号这样的格式。其中的自定义名字和版本号可以根据实际情况进行修改。

创建服务

docker service create --name spider --network host 45.77.138.242:8003/spider:0.01

创建私有源仓库(可选)

私有源本身也是一个Docker的镜像

docker pull registry:latest
# 或者
docker pull docker.io/registry

启动私有源镜像

 docker run -d -p 8003:5000 --name registry -v /home/dockeruser/data:/tmp/registry docker.io/registry:latest

允许docker使用可信任的http私有源

echo '{ "insecure-registries":["45.77.138.242:8003"] }' >> /etc/docker/daemon.json

上传镜像到私有源
镜像构建完成以后,需要把它上传到私有源。此时需要执行命令:

docker push localhost:8003/spider:0.01

重启docker

systemctl restart docker

Slave配置

  • 安装Docker
  • 加入集群
  • 信任源

加入集群

	docker swarm join --token SWMTKN-1-0hqsajb64iynkg8ocp8uruktii5esuo4qiaxmqw2pddnkls9av-dfj7nf1x3vr5qcj4cqiusu4pv 45.77.138.242:2377

配置信任源

echo '{ "insecure-registries":["45.77.138.242:8003"] }' >> /etc/docker/daemon.json

更新代码

接下来需要更新服务中的镜像。更新镜像有两种做法。一种是先把所有爬虫关闭,再更新。

docker service scale spider=0
docker service update --image 45.77.138.242:8003/spider:0.02 spider
docker service scale spider=3

第二种是直接执行更新命令。

docker service update --image 45.77.138.242:8003/spider:0.02 spider

可视化 portainer

docker service create \
--name portainer \
--publish 9000:9000 \
--constraint 'node.role == manager' \
--mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock \
portainer/portainer \
-H unix:///var/run/docker.sock

docker-compose

Compose 安装

Linux 上我们可以从 Github 上下载它的二进制包来使用,最新发行的版本地址:https://github.com/docker/compose/releases。

运行以下命令以下载 Docker Compose 的当前稳定版本:

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

要安装其他版本的 Compose,请替换 1.24.1。

将可执行权限应用于二进制文件:

$ sudo chmod +x /usr/local/bin/docker-compose

创建软链:

$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

测试是否安装成功:

$ docker-compose --version

cker-compose version 1.24.1, build 4667896b

示例

1.docker-compose.yml

version: '2'

services:

  flask:
    build: .
    command: python main.py
    ports:
      - 5003:5003
    volumes:
      - /home/project/flask_api-master/:/code/
  celery:
    build: .
    command: celery -A application.base:celery_app worker --loglevel=info -P eventlet
    volumes:
      - /home/project/flask_api-master/:/code/

持续打印日志

docker-compose logs -f

Git

强制覆盖

git强制覆盖:

    git fetch --all
    git reset --hard origin/master
    git pull

git强制覆盖本地命令(单条执行):

 git fetch --all &&  git reset --hard origin/master && git pull

第一个是:拉取所有更新,不同步;
第二个是:本地代码同步线上最新版本(会覆盖本地所有与远程仓库上同名的文件);
第三个是:再更新一次(其实也可以不用,第二步命令做过了其实)

linux

pip3安装包错误跳过

该命令可以跳过安装错误的库,继续安装

while read requirement; do pip3 install $requirement; done < requirements.txt    

软链接

创建python3软链接:

(安装python一般会自动生成软链接/usr/bin/python3,如果没有,请将“/usr/bin/python3”改为你安装的python3的位置)

sudo ln -s /usr/bin/python3 /usr/bin/python
同理,pip也一样

sudo ln -s /usr/bin/pip3 /usr/bin/pip

Docker中的Ubuntu 安装vi/vim

依次执行以下命令

先备份一下source.list文件

cp /etc/apt/sources.list /etc/apt/sources.list.bak

然后往文件里写入内容。由于现在没有vi/vim,而且由于ubuntu官方源不在国内,所以只能把内容通过echo方式重定向到文件中。

echo "deb http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse" >/etc/apt/sources.list
echo "deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse" >>/etc/apt/sources.list
echo "deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse" >>/etc/apt/sources.list
echo "deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse" >>/etc/apt/sources.list
echo "deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse" >>/etc/apt/sources.list
echo "deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse" >>/etc/apt/sources.list
echo "deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse" >>/etc/apt/sources.list
echo "deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse" >>/etc/apt/sources.list
echo "deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse" >>/etc/apt/sources.list

更新apt源

apt-get update 

安装vim

apt-get install -y vim

ubuntu防火墙

1.安装

sudo apt-get install ufw

2.启用

sudo ufw enable 
sudo ufw default deny

运行以上两条命令后,开启了防火墙,并在系统启动时自动开启。
关闭所有外部对本机的访问,但本机访问外部正常。

3.开启/禁用

sudo ufw allow|deny [service]

打开或关闭某个端口,例如:

sudo ufw allow smtp 允许所有的外部IP访问本机的25/tcp (smtp)端口 
sudo ufw allow 22/tcp 允许所有的外部IP访问本机的22/tcp (ssh)端口 
sudo ufw allow 53 允许外部访问53端口(tcp/udp) 
sudo ufw allow from 192.168.1.100 允许此IP访问所有的本机端口 
sudo ufw allow proto udp 192.168.0.1 port 53 to 192.168.0.2 port 53 
sudo ufw deny smtp 禁止外部访问smtp服务 
sudo ufw delete allow smtp 删除上面建立的某条规则 

4.查看防火墙状态

sudo ufw status
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值