启动容器 后台启动 $ docker run --name nginx -d nginx:alpine 查看 run 流程 查看容器进程 等同于在虚拟机中开辟了一块隔离的独立的虚拟空间.../bin/sh (注意:退出容器后,该容器会变成退出状态,因为容器内部的 1 号进程退出) 实际上,在运行容器的时候,镜像地址后面跟的命令等于是覆盖了原有的容器的 CMD 命令,因此,执行的这些命令在容器内部就是...1 号进程,若该进程不存在了,那么容器就会处于退出的状态,比如,宿主机中执行 echo 1,执行完后,该命令立马就结束了 ping www.baidu.com,执行完后,命令的进程会持续运行 docker...在四核的系统上,假设有四个单进程的容器,它们都能各自使用一个核的 100% CPU 时间,不管它们的 cpu 共享权值是多少。...如果不想使用这些缓存镜像,可以在构建时指定--no-cache参数,如:docker build --no-cache CMD 构建容器后调用,也就是在容器启动时才进行调用 格式: CMD ["
ENTRYPOINT ENTRYPOINT 有以下几个重点: ENTRYPOINT 指定镜像的默认入口命令,该入口命令会在启动容器时作为根命令执行,所有其他传入值作为该命令的参数。...在容器运行的时候通过 ENTRYPOINT 来做一些操作,比如把 volume 挂载的目录权限给改正确,然后再切换普通用户运行正常的程序进程。...在容器中虽然可以,但是这不是一个好的方案,容器里面 PID=1 的进程就是应用本身。因此可以使用gosu命令来切换用户执行命令。...} -c "exec uwsgi --ini uwsgi.ini --http=0.0.0.0:${DJANGO_PORT}" exec su-exec www-data uwsgi --ini...exec:系统调用exec是以新的进程去代替原来的进程,但进程的 PID 保持不变,可以保证容器的主程序 PID=1。 脚本例 2: #!
跑 pip install uwsgi # 在项目根路径下创建一个uwsgi.ini 文件,写入 [uwsgi] #配置和nginx连接的socket连接 socket=0.0.0.0:8080 #也可以使用...0.0.0.0:8080 #配置项目路径,项目的所在目录 chdir=/home/django_test #配置wsgi接口模块文件路径 wsgi-file=django_test/wsgi.py #配置启动的进程数...processes=4 #配置每个进程的线程数 threads=2 #配置启动管理主进程 master=True #配置存放主进程的进程号文件 pidfile=uwsgi.pid #配置dump日志记录...daemonize=uwsgi.log #启动,停止,重启,查看 uwsgi --ini uwsgi.ini #启动 lsof -i :8001 #按照端口号查询 ps aux | grep...EXPOSE 8080 CMD ["uwsgi","--ini","/home/django_test/uwsgi.ini"] # 这句命令,是后台执行的,不会夯住,容器里面就停了 # dockerfile
,也可以使用配置文件来启动,推荐使用配置文件来启动守护进程,配置文件内容如下 [uwsgi] socket = 127.0.0.1:9090 stats = 127.0.0.1:9293 workers...该值如果太小会报错 具体参数含义可以到官方文档查找 然后使用命令启动uwsgi进程,其中uwsgi.ini为上面内容的配置文件 uwsgi -i uwsgi.ini 可以看下日志文件有没有报错,或者看下...,你已经可以通过http://ip:8080/ 来访问到对应的vue编译好的VUE_HTML_DIR目录下的index.html了,但是这时候你可能会有其他困扰,比如找不到css样式文件的问,这经常是静态配置有误导致找不到静态文件的问题...然后可以在DJANGO的配置文件settings.py中增加以下几个配置: STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, "static...在collectstatic运行的时候会把STATICFILES_DIRS中的静态文件拷贝到这个目录中,达到从开发环境到生产环节过程中移植静态文件的作用。
Docker 容器无法删除 找不到对应容器进程是最吓人的 [问题起因] 今天遇到 docker 容器无法停止/终止/删除,以为这个容器可能又出现了 dockerd 守护进程托管的情况,但是通过 ps -...哎,后来开始开始查 supervisor 以及 Dockerfile 中的进程,都没有。这种情况的可能原因是容器启动之后,之后,主机因任何原因重新启动并且没有优雅地终止容器。...localhost 配置的有问题,由于 Nginx 是在容器中运行,所以 localhost 为容器中的 localhost,而非本机的 localhost,所以导致无法访问。...[解决方法] docker exec 的参数 -t 是指 Allocate a pseudo-TTY 的意思,而 CI 在执行 job 的时候并不是在 TTY 终端中执行,所以 -t 这个参数会报错。...; scgi_temp_path /tmp/scgi_temp; uwsgi_temp_path /tmp/uwsgi_temp; include
这就是对 Dockerfile 构建分层存储的概念不了解所导致的错误。 之前说过每一个 RUN 都是启动一个容器、执行命令、然后提交存储层文件变更。...场景二:应用运行前的准备工作 启动容器就是启动主进程,但有些时候,启动主进程前,需要一些准备工作。...在指定了 ENTRYPOINT 指令后,用 CMD 指定具体的参数。 之前介绍容器的时候曾经说过,Docker 不是虚拟机,容器就是进程。既然是进程,那么在启动容器的时候,需要指定所运行的程序及参数。...CMD 指令就是用于指定默认的容器主进程的启动命令的。 在指令格式上,一般推荐使用 exec 格式,这类格式在解析时会被解析为 JSON 数组,因此一定要使用双引号 “,而不要使用单引号。...对于容器而言,其启动程序就是容器应用进程,容器就是为了主进程而存在的,主进程退出,容器就失去了存在的意义,从而退出,其它辅助进程不是它需要关心的东西。
docker stop container-id # 重启已经停止的容器 docker start container-id # 不管容器是否启动都直接重启容器 docker restart container-id...,日志路径daemonize 保证进程自守护。...在这个选项中通常会配置一个文件地址,日志会写入这个地址。如果不配置 daemonize,uWSGI 会在前台运行,日志输入到 STDOUT。...这种情况下,建议用 Supervisor 来管理 uWSGI 进程。 因为 Sueprvisor 要求被管理的程序必须运行在非守护模式。...当使用了 Supervisor 来管理进程后,uWSGI 输入到 STDOUT 的日志会被 Supervisor 的日志系统接管。
CMD 和 ENTRYPOINT 区别 CMD # 指定这个容器启动的时候要运行的命令,不可以追加命令 ENTRYPOINT # 指定这个容器启动的时候要运行的命令...not found in $PATH: unknown....看到可执行文件找不到的报错,executable file not found 跟在镜像名后面的是 command,运行时会替换 CMD 的默认值,因此这里的 -l 替换了原来的 CMD,而不是追加在原来的...root root 4096 Sep 15 14:17 usr drwxr-xr-x 20 root root 4096 Sep 15 14:17 var ENTRYPOINT 的第二个应用场景 启动容器就是启动主进程...,但启动主进程前,可能需要一些准备工作,比如 mysql 可能需要一些数据库配置、初始化的工作,这些工作要在最终的 mysql 服务器运行之前解决 还可能希望避免使用 root 用户去启动服务,从而提高安全性
前言 Django在开发过程中可以使用python3 manage.py runserver启动web服务,但是这个服务只是用来开发调试使用的。...[root@server01 performance]# 测试uwsgi启动django服务 命令说明: cd /your/django/path # 进入项目目录 uwsgi --http ip:port...可以看到服务正常访问,但是这只是测试的启动方式。下面来看看怎么使用 uwsgi 的配置文件方式来启动。...使用uwsgi配置文件启动django项目 在django项目下,创建uwsgi.ini配置文件: [root@server01 performance]# > uwsgi.ini 编辑vim uwsgi.ini.../static # 启动uwsgi的用户名和用户组 uid=root gid=root # 启用主进程 master=true # 自动移除unix Socket和pid文件当服务停止的时候 vacuum
' > /usr/share/nginx/html/index.html exec格式 RUN ["可执行文件", "参数1", "参数2"],这更像是函数调用中的格式。...CMD,容器启动命令 CMD用于指定容器启动后需要执行的命令,指令的格式和RUN相似,也是两种格式: shell格式 CMD exec格式 CMD ["可执行文件", "参数1", "参数2"...之前介绍容器的时候曾经说过,Docker不是虚拟机,容器就是进程。既然是进程,那么在启动容器的时候,需要指定所运行的程序及参数。CMD指令就是用于指定默认的容器主进程的启动命令的。...场景二:应用运行前的准备工作 启动容器就是启动主进程,但有些时候启动主进程前需要一些准备工作。...在1.12以前,Docker不会检测到容器的这种状态,从而不会重新调度,导致可能会有部分容器已经无法提供服务了却还在接受用户请求。
我们将通过引用我们的wsgi.py文件指定模块,减去扩展名: [uwsgi] module = wsgi 接下来,我们将告诉uWSGI以主模式启动并生成五个工作进程来提供实际请求: [uwsgi] module...创建Systemd单元文件将允许CentOS的init系统在服务器启动时自动启动uWSGI并为Flask应用程序提供服务。...然后,我们将映射工作目录并设置PATH环境变量,以便init系统知道进程的可执行文件所在的位置(在我们的虚拟环境中)。然后我们将指定命令启动服务。...Systemd要求我们提供uWSGI可执行文件的完整路径,该文件安装在我们的虚拟环境中。...,我们可以启动并启用Nginx进程,以便它在启动时自动启动: sudo systemctl start nginx sudo systemctl enable nginx 您现在应该可以在Web浏览器中访问服务器的域名或
CMD 容器启动命令 CMD 指令的格式和 RUN 相似,也是两种格式: shell 格式: CMD exec 格式: CMD ["可执行文件", "参数1", "参数2"...]...既然是进程,那么在启动容器的时候,需要指定所运行的程序及参数。 CMD 指令就是用于指定默认的容器主进程的启动命令的。...对于容器而言,其启动程序就是容器应用进程,容器就是为了主进程而存在的,主进程退出,容器就失去了存在的意义,从而退出,其它辅助进程不是它需要关心的东西。...场景二:应用运行前的准备工作 启动容器就是启动主进程,但有些时候,启动主进程前,需要一些准备工作。...在 1.12 以前,Docker 不会检测到容器的这种状态,从而不会重新调度,导致可能会有部分容器已经无法提供服务了却还在接受用户请求。
描述 build # 重新构建服务 ps # 列出容器 up # 创建和启动容器 exec # 在容器里执行命令 scale # 指定一个服务容器启动数量...top # 显示容器进程 logs # 查看容器输出 down # 删除容器、网络、数据卷和镜像 stop # 停止 start # 启动...--ini uwsgi.ini # 启动uwsgi命令 working_dir: /code/web # 项目工作路径...故可以像在应用中使用localhost一样使用服务的别名链接其他容器的服务,前提是多个服务容器在一个网络中可路由联通) links也可以起到和depends_on相似的功能,即定义服务之间的依赖关系,从而确定服务启动的顺序...这就打开了容器与主机操作系统之间的共享PID地址空间。 使用此标志启动的容器将能够访问和操作裸机的命名空间中的其他容器,反之亦然。即打开该选项的容器可以相互通过进程 ID 来访问和操作。
宿主主机与容器互相传输文件方式 二、本地与远程的文件互相传输 三、linux下文件查找 四、查看进程和端口 ---- 一、Docker服务相关命令 -启动docker 服务 systemctl start...-进入容器 docker exec -it 容器id /bin/bash docker exec -it 容器id /bin/sh -启动容器 docker start 容器id -停止容器 docker...path目录中查找,且witch找的都是可执行文件 which redis 3、locate linux系统每天至少自动扫描一次文件,将结果保存到数据库,locate查的是数据库记录。...locate查询比find要快,但最新文件如果在数据库中没有记录,是需要手动更新(updatedb) locate redis 4、whereis 与which类似查询【可执行文件】,whereis查询更多...grep过滤 netstat -tnlp #显示tcp的端口和进程等相关情况 说明: 2、杀掉占用端口的进程 kill -9 pid 3、Linux查看某个服务是否启动 ps -ef | grep
在我们运行或者调试uwsgi的时候: uwsgi --socket 0.0.0.0:5000 --protocol=http -w myproject:app uwsgi --ini myproject.ini...如果Ctrl+C或者退出ssh链接,都会导致uwsgin进程关闭。...这时,我们需要进程管理软件管理 uwsgi 进程的运行了。Ubuntu 自带的 systemd 是最简单的方法,可以将我们的项目变为系统服务。...ExecStart:服务启动的代码 ExecReload:重启命令 ExecStop:停止命令 WantedBy=multi-user.target:指明会跟随系统启动而启动该服务。...myproject.service systemctl stop myproject.service 一个自己遇到坑 uwsgi的路径必须是自己编译是的venv环境下的uwsgi,要不然启动之后找不到
我们将指定两件事:模块本身,通过引用wsgi.py文件减去扩展名,以及文件中的可调用对象app: [uwsgi] module = wsgi:app 接下来,我们将告诉uWSGI以主模式启动并生成五个工作进程来提供实际请求...] User=sammy Group=www-data 接下来,让我们绘制工作目录并设置PATH环境变量,以便init系统知道进程的可执行文件位于我们的虚拟环境中。...我们还指定启动服务的命令。Systemd要求我们提供uWSGI可执行文件的完整路径,该文件安装在我们的虚拟环境中。我们将传递我们在项目目录中创建的配置文件的名称.ini。...如果我们在启动时启动它,这将告诉systemd将此服务链接到什么。...我们希望在常规多用户系统启动并运行时启动此服务: [Unit] Description=uWSGI instance to serve myproject After=network.target
前台运行: CMD 指令就是用于指定默认的容器主进程的启动命令的。提到 CMD 就不得不提容器中应用在前台执行和后台执行的问题。这是初学者常出现的一个混淆。...对于容器而言,其启动程序就是容器应用进程,容器就是为了主进程而存在的,主进程退出,容器就失去了存在的意义,从而退出,其它辅助进程不是它需要关心的东西。...那么当 service nginx start 命令结束后,sh 也就结束了,sh 作为主进程退出了,自然就会令容器退出。 正确的做法是直接执行 nginx 可执行文件,并且要求以前台形式运行。...例如在没启动数据库容器的时候启动了应用容器,这时候应用容器会因为找不到数据库而退出,为了避免这种情况我们需要加入一个标签,就是 depends_on,这个标签解决了容器的依赖、启动先后的问题。...web 服务时,也会启动 redis 和 db 两个服务,因为在配置文件中定义了依赖关系。
在本指南中,我们将演示如何在Ubuntu 16.04上安装和配置某些组件以支持和服务Django应用程序。我们将配置uWSGI应用程序容器服务器以与我们的应用程序进行交互。...接下来,我们将创建一个systemd单元文件来管理uWSGI emperor进程并在启动时自动启动uWSGI。...对于ExecStart指令指定的实际启动命令,我们将指向uwsgi可执行文件。我们将告诉它以“Emperor模式”运行,允许它使用它找到的文件管理多个应用程序/etc/uwsgi/sites。...此时我们无法成功启动服务,因为它依赖于www-data用户可用。在安装Nginx之前,我们必须等待启动uWSGI服务。...-u uwsgi 在更新配置或应用程序时,可能需要重新启动进程以根据更改进行调整。
[问题起因一] 容器在导入或者启动的时候,如果提示磁盘空间不足的,那么多半是真的因为物理磁盘空间真的有问题导致的。如下所示,我们可以看到 / 分区确实满了。... "default-address-pools" : [ { "base" : "172.240.0.0/16", "size" : 24 } ]}6Docker 容器无法删除找不到对应容器进程是最吓人的...哎,后来开始开始查 supervisor 以及 Dockerfile 中的进程,都没有。这种情况的可能原因是容器启动之后,主机因任何原因重新启动并且没有优雅地终止容器。...stdout 的桥梁[解决方法] docker exec 的参数 -t 是指 Allocate a pseudo-TTY 的意思,而 CI 在执行 job 的时候并不是在 TTY 终端中执行,所以 -...; scgi_temp_path /tmp/scgi_temp; uwsgi_temp_path /tmp/uwsgi_temp; include /etc
[问题起因一] 容器在导入或者启动的时候,如果提示磁盘空间不足的,那么多半是真的因为物理磁盘空间真的有问题导致的。如下所示,我们可以看到 / 分区确实满了。...找不到对应容器进程是最吓人的 [问题起因] 今天遇到 docker 容器无法停止/终止/删除,以为这个容器可能又出现了 dockerd 守护进程托管的情况,但是通过 ps -ef 无法查到对应的运行进程...哎,后来开始开始查 supervisor 以及 Dockerfile 中的进程,都没有。这种情况的可能原因是容器启动之后,主机因任何原因重新启动并且没有优雅地终止容器。...localhost 配置的有问题,由于 Nginx 是在容器中运行,所以 localhost 为容器中的 localhost,而非本机的 localhost,所以导致无法访问。...; scgi_temp_path /tmp/scgi_temp; uwsgi_temp_path /tmp/uwsgi_temp; include
领取专属 10元无门槛券
手把手带您无忧上云