【搭网站】使用docker部署在Linux服务器上

docker简介

常用docker命令小结

这里是后面可能用到的一些命令,后面还会提到

进入容器:

docker exec -i -t  fee2bbb7c9ee /bin/bash

查看进程:

docker ps 

查看日志:

docker logs -f [container-id]

杀死容器:

docker kill

查看构建好的镜像

sudo docker images

强制删除镜像:

docker rmi -f

1. 构建后端镜像

首先服务器要有安装docker,具体安装方法自行百度,或者宝塔安装更方便

在后端项目创建Dockerfile

Dockerfile 用于指定构建 Docker 镜像的方法

Dockerfile 一般情况下不需要完全从 0 自己写,建议去 github、gitee 等托管平台参考同类项目(比如 springboot)

Dockerfile 编写:

  • FROM 依赖的基础镜像
  • WORKDIR 工作目录
  • COPY 从本机复制文件
  • RUN 执行命令
  • CMD / ENTRYPOINT(附加额外参数)指定运行容器时默认执行的命令
FROM maven:3.5-jdk-8-alpine as builder

# Copy local code to the container image.
WORKDIR /app
COPY pom.xml .
COPY src ./src

# Build a release artifact.
RUN mvn package -DskipTests

# Run the web service on container startup.
CMD ["java","-jar","/app/target/user-center-backend-0.0.1-SNAPSHOT.jar","--spring.profiles.active=prod"]
                              

在项目根目录当中新建Dockerfile文件,把上述代码复制进去

在这里插入图片描述
然后把项目文件用git clone到服务器的文件夹下(比如用了宝塔的就是/www/wwwroot)

运行命令:(后面-t是给镜像打标签,具体docker命令参考docker 菜鸟教程

//后端(没权限用sudo)
user-center-backend>> sudo docker build -t user-center-backend:v0.0.1 .

后端镜像构建成功

2.构建前端镜像

一个供参考的前端Dockerfile配置

可能的踩坑点:注意下面需要有dist文件夹和docker文件夹,这两个必须得先有(于是我们待会直接把构建好的dist文件夹放上去再交给docker构建),但好像有方法不用实现构建出dist,由于博主不了解Docker构建过程,所以这里留个坑。

FROM nginx

WORKDIR /usr/share/nginx/html/
USER root

COPY ./docker/nginx.conf /etc/nginx/conf.d/default.conf

COPY ./dist  /usr/share/nginx/html/

EXPOSE 80

CMD ["nginx", "-g", "daemon off;"]

在前端项目新建Dockerfile文件,复制粘贴上述内容

nginx.conf参考配置:

server {
    listen 80;

    # gzip config
    gzip on;
    gzip_min_length 1k;
    gzip_comp_level 9;
    gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
    gzip_vary on;
    gzip_disable "MSIE [1-6]\.";

    root /usr/share/nginx/html;
    include /etc/nginx/mime.types;

    location / {
        try_files $uri /index.html;
    }
}

新建docker文件夹,然后在docker文件夹下面新建nginx.conf文件夹,复制粘贴上述内容,比较重要的是最后的location,找不到url降级寻找index.html

然后参考后端,将项目文件拉取到服务器中(比如用git,注意git拉取http加sudo),构建前端镜像

user-center-backend>> cd ..
wwwroot>> cd user-center-frontend
//前端(没有权限用sudo)
user-center-frontend>> sudo docker build -t user-center-frontend:v0.0.1 .

//可以看下已经安装的镜像(没有权限用sudo)
user-center-frontend>> sudo docker images
#REPOSITORY            TAG                IMAGE ID       CREATED          SIZE
#user-center-frontend  v0.0.1             b0bfb35288eb   27 seconds ago   144MB
#user-center-backend   v0.0.1             ec4c8279aed2   49 minutes ago   217MB
#nginx                 latest             fa5269854a5e   4 days ago       142MB
#maven                 3.5-jdk-8-alpine   fb4bb0d89941   3 years ago      119MB

有兴趣的话可以进行构建优化:减少大小、减小构建时间(多阶段构建),在Dockerfile进行一定配置

3. 启动构建好的docker项目

注意:记得把其他占用80端口和8080端口的进程停了,如果以前有站点在运行需要停用,但是以前的nginx服务器,它还是占用了80端口,所以我们还要把nginx也关了
在这里插入图片描述

在这里插入图片描述

关键的启动命令:(先别急着执行)

# 前端
docker run -p 80:80 -d user-center-frontend:v0.0.1

# 后端
docker run -p 8080:8080 user-center-backend:v0.0.1

虚拟化介绍

  1. 端口映射:把本机的资源(实际访问地址)和容器内部的资源(应用启动端口)进行关联
  2. 目录映射:把本机的端口和容器应用的端口进行关联

3.1 启动前端镜像

//前端(没有权限用sudo) -d以后台的方试运行
~>> docker run -p 80:80 -d user-center-frontend:v0.0.1

//用netstat -ntlp看看80端口是否在监听
netstat -ntlp

此时应该可以访问公网ip

3.2 启动后端镜像

//后端(没有权限用sudo)
~>> docker run -p 8080:8080 user-center-backend:v0.0.1

访问api端口,看是否返回json信息

3.3 docker其他操作

3.3.1 日志查看

//查看进程(可以查看已经启动的容器ID,没有权限用sudo)
//容器ID不是固定的,不要盲目复制命令哦
~>> docker ps
#CONTAINER ID   IMAGE                         COMMAND                  CREATED          STATUS          PORTS                               NAMES
#61444cbea251   user-center-frontend:v0.0.1   "/docker-entrypoint.…"   12 minutes ago   Up 12 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp   recursing_cori

//查看日志		docker logs 容器ID
//这些都是咱们的访问记录,可以看到哪个用户,哪个IP,在什么时间访问了你的网页的哪些文件
~>> docker logs 61444cbea251
#/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
#/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
#/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
#10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
#10-listen-on-ipv6-by-default.sh: info: /etc/nginx/conf.d/default.conf differs from the packaged version
#/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
#/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
#/docker-entrypoint.sh: Configuration complete; ready for start up
#2022/04/28 03:35:23 [notice] 1#1: using the "epoll" event method
#2022/04/28 03:35:23 [notice] 1#1: nginx/1.21.6
#2022/04/28 03:35:23 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6) 
#2022/04/28 03:35:23 [notice] 1#1: OS: Linux 3.10.0-1160.49.1.el7.x86_64
#2022/04/28 03:35:23 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
#2022/04/28 03:35:23 [notice] 1#1: start worker processes
#2022/04/28 03:35:23 [notice] 1#1: start worker process 30
#2022/04/28 03:35:23 [notice] 1#1: start worker process 31
#1.1.1.1 - - [28/Apr/2022:03:37:28 +0000] "GET / HTTP/1.1" 200 1919 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" "-"
...(省略)...

3.3.2 让日志保持持续输出,并退出容器

//-f跟踪日志输出(没有权限用sudo)
~>> docker logs 容器ID -f

//ctrl+c退出 杀死掉这个容器  docker kill 容器ID
~>> docker kill 61444cbea251
#61444cbea251

//查看进程,没有在启动的容器了
~>> docker ps
#CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

3.3.3 删除镜像:

//查看镜像(没有权限用sudo)
~>> docker images
#REPOSITORY             TAG                IMAGE ID       CREATED        SIZE
#user-center-frontend   v0.0.1             9722984f9385   20 hours ago   144MB
#user-center-backend    v0.0.1             ec4c8279aed2   3 days ago     217MB
#nginx                  latest             fa5269854a5e   7 days ago     142MB
#maven                  3.5-jdk-8-alpine   fb4bb0d89941   3 years ago    119MB

//强制删除镜像 docker rmi -f 镜像ID
//举个例子可以下helloworld镜像,删除试试,我没把user-center-frontend删掉[doge]保命
~>> docker rmi -f 9722984f9385
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 1. 首先,需要在Linux服务器上安装Docker,可以通过官方网站或者包管理器进行安装。 2. 在本地开发环境中,编写Dockerfile文件,定义项目的镜像构建规则,包括基础镜像、依赖项、环境变量等。 3. 使用docker build命令,将Dockerfile文件构建成镜像,并将其推送到Docker Hub或者私有仓库中。 4. 在Linux服务器上,使用docker pull命令,从Docker Hub或者私有仓库中拉取镜像。 5. 使用docker run命令,启动容器,并将容器与主机端口进行映射,使得外部用户可以访问容器中的应用程序。 6. 可以使用docker-compose工具,将多个容器组合在一起,实现复杂的应用程序部署。 ### 回答2: 要将项目通过Docker部署Linux服务器上,我们需要按照以下步骤进行操作: 1. 首先,在Linux服务器上安装Docker。可以通过运行命令`sudo apt-get install docker-ce`来安装Docker。安装完成后,使用命令`docker --version`来验证安装是否成功。 2. 在本地开发环境中创建一个Dockerfile,这是一个文本文件,用来定义将来创建Docker镜像的步骤。Dockerfile中包含了项目所需的软件依赖以及项目代码的复制指令。 3. 在本地开发环境中构建Docker镜像。使用命令`docker build -t image_name:tag .`来构建镜像。其中,`-t`参数用来指定镜像的名称和标签,`.`表示在当前目录下查找Dockerfile文件。 4. 导出镜像文件。使用命令`docker save -o image.tar image_name:tag`将构建好的镜像导出为tar文件。然后将此tar文件通过网络传输到Linux服务器上。 5. 在Linux服务器上导入镜像。使用命令`docker load -i image.tar`来导入镜像。 6. 运行容器。使用命令`docker run -d -p host_port:container_port --name container_name image_name:tag`来运行容器。其中,`-d`参数表示容器将在后台运行,`-p`参数用来指定主机端口和容器端口的映射关系,`--name`参数用来指定容器的名称。 通过以上步骤,我们可以将项目通过Docker部署Linux服务器上。注意,以上步骤中的部分命令需要使用管理员权限,可以在命令前面加上`sudo`来获取管理员权限。 ### 回答3: 要将项目通过Docker部署Linux服务器上,可以按照以下步骤进行操作: 1. 安装Docker:在Linux服务器上安装Docker,可以通过在终端中输入命令来安装。例如,对于Ubuntu系统可以使用以下命令: ``` sudo apt-get update sudo apt-get install docker-ce ``` 2. 构建Docker镜像:在本地开发环境中创建Dockerfile,定义项目的环境和依赖。使用Docker命令构建镜像,例如: ``` docker build -t project-image:version . ``` 这将基于Dockerfile在当前目录中构建一个名为project-image和指定版本的镜像。 3. 上传镜像至仓库:可以将镜像上传至Docker仓库,以便在服务器上进行获取。可以使用以下命令登录到仓库: ``` docker login ``` 然后使用以下命令将镜像上传至仓库: ``` docker push username/project-image:version ``` 4. 在 Linux服务器上拉取镜像:在服务器上登录Docker仓库,并使用以下命令拉取镜像到服务器: ``` docker pull username/project-image:version ``` 5. 运行容器:使用以下命令在Linux服务器上运行容器: ``` docker run -d --name project-container -p 8080:80 project-image:version ``` 这将在服务器上创建一个名为project-container的容器,并将主机的8080端口映射到容器的80端口。 通过以上步骤,项目就会被部署Linux服务器上了。可以通过服务器的IP地址和指定的端口号来访问项目。需要注意的是,服务器上需要安装和配置好Docker服务,确保网络端口可访问,并根据项目的具体配置修改命令中的参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值