docer在项目中的应用

263 阅读3分钟

参考地址

  1. docs.docker.com/
  2. blog.csdn.net/wuapeng/art…

什么是docker

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。不仅对文件,对网络端口、进程都封装隔离,区别于虚拟机,不涉及操作系统,用的是宿主的内核

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

安装docker

  • windows:
  1. 卸载旧版本

sudo yum remove docker \                   docker-client \                   docker-client-latest \                   docker-common \                   docker-latest \                   docker-latest-logrotate \                   docker-logrotate \                   docker-engine

  1. 查看仓库中所有docker版本,并选择特定版本

yum list docker-ce –showduplicates | sort –r

yum install docker-ce-17.12.1.ce

  1. 启动docker并设置开机启动

systemctl start docker

systemctl enable docker

  1. 验证docker安装是否成功

docker version

  • mac
brew cask install docker
docker --version

Docker 是一个典型的 C/S 架构的应用

image.png

项目中的应用

创建镜像前准备:

1. 配置daemon.json

docker安装后默认没有daemon.json这个配置文件,需要进行手动创建。配置文件的默认路径:/etc/docker/daemon.json 需要配置上私有库的地址

image.png 如果用的是mac,需要给docker加注册地址 image.png

2. docker info查看安装信息

比如想看docker镜像存储的目录  docker info | grep "Docker Root Dir"

3. 创建镜像

  • 编写Dockfile
# 设置基础镜像
FROM nginx:1.17.6
# 定义作者
MAINTAINER Jean

RUN mkdir -p /etc/nginx/logs/ && touch /etc/nginx/logs/access.log \
    && mkdir -p /app/Argus/ \
    && mkdir -p /app/nginx/ssl/_.chinaamc.com/ \
    && apt-get update && apt-get install -y procps \
    && apt-get install -y vim

# 将dist文件中的内容复制到 /usr/share/nginx/html/ 这个目录下面
COPY ./dist  /app/dist
COPY nginx.conf /etc/nginx/nginx.conf
COPY ./https-key/ /app/nginx/ssl/_.test.com/

# CMD ["nginx", "-g", "daemon off;"]
  • 创建镜像 docker build -t test -f ./Dockerfile-test .
  • 创建容器 docker run --name test-container -p 443:443 -d d292f588a09f

docker ps -a 查看所有容器 如果创建失败,

docker logs 容器id 

可以手动复制 docker cp ./nginx.conf e21aba3e3387:/etc/nginx/nginx.conf

如果创建成功,状态是 Up

image.png

  • 进入容器 docker exec -it e21aba3e3387 /bin/bash

image.png

  • 对容器的操作 docker start/stop/restart/rm 容器id
  • 创建tag docker tag d292f588a09f 1.2.3.158/web-front/test:0.1

4. 推送镜像到远程

  • 首先,保证登陆远程私有库 docker login 1.2.3.158
  • 将本地创建的tag推送到远程 docker push 1.2.3.158/web-front/test:0.1
  • 远程查看 咱们docker库的远程地址是:http://1.2.3.158/harbor/

5. 拉取远程镜像

一样的,需要先登陆上去,然后pull,如果拉取和部署不在同一服务器上,需要将镜像保存成jar,然后再加载

  • 拉取镜像 docker pull 1.2.3.158/web-front/test:0.1
  • 保存镜像为文件 docker save -o web.tar web-front/work
  • 将*.tar拷贝至目标内网服务器中
  • 加载镜像 docker load < web.tar

docker与kubernetes(k8s)

image.png Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展。如果你曾经用过Docker容器技术部署容器,那么可以将Docker看成Kubernetes内部使用的低级别组件。Kubernetes不仅仅支持Docker,还支持Rocket,这是另一种容器技术。
使用Kubernetes可以:

  • 自动化容器的部署和复制
  • 随时扩展或收缩容器规模
  • 将容器组织成组,并且提供容器间的负载均衡
  • 很容易地升级应用程序容器的新版本
  • 提供容器弹性,如果容器失效就替换它,等等.

前端一般要配合nginx使用

1、常用命令

nginx -t

nginx -v

nginx -c

nginx -s reload/stop

2、平滑重启

启动前先nginx -t -c aa.conf 看配置文件是否正确,再nginx -s reload

3、https

首先看需求是否要将80跳转成443,rewrite

然后将ssl证书放到目录中,在nginx设计ssl对应路径

ssl_certificate      /app/nginx/ssl/***/***.cer;
ssl_certificate_key  /app/nginx/ssl/***/***.key;

ssl_session_cache    shared:SSL:1m;
ssl_session_timeout  5m;

ssl_ciphers  HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers  on;