共计 2833 个字符,预计需要花费 8 分钟才能阅读完成。
背景:
本萌最近在部署自己开发的项目的时候发现同一套代码上传到服务器上后,部分功能莫名其妙的有点问题,服务器的各项配置都没有做过变动,所以想把项目转战到 docker。
奈何刚接触 docker,很多地方都不懂,在这个坑里面折腾了一两天。决定对本次实践做个过程总结希望少点人走弯路。
系统环境:CentOS 7
一、docker 安装
1、以 root 用户登录(使用 sudo 命令也行,本人懒,不想敲那么多字符),删除旧版本的 docker;
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
2、如果以前安装过 docker 的,需要先删除以前的 docker 文件;
rm -rfv /var/lib/docker/
3、安装 docker-ce(最新的系统可以不需要执行,本人为了保险起见执行了 ^0^);
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
4、下载 docker-ce 的 yum 源配置文件;
yum-config-manager \
–add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
5、安装 docker-ce;
yum install docker-ce
6、设置 docker-ce 随系统启动;
systemctl enable docker
7、启动 docker;
systemctl start docker
8、验证 docker 是否安装成功;
docker -v
检查结果如下:
9、安装 docker-compose
curl -L https://github.com/docker/compose/releases/download/1.20.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
二、编写项目 dockerfile 文件
在动手写之前,先看下项目结构:
编写好的 Dockerfile 文件如下:
FROM Python:3.6.4
ENV PYTHONUMBUFFERED 1
RUN mkdir /leartd
RUN mkdir /leartd/dockermysql
WORKDIR /leartd
ADD requirements.txt /leartd/
RUN pip install -r requirements.txt
ADD . /leartd/
三、编写 docker-compose.yml 文件
version: ‘3’
services:
db:
image: mysql
restart: always
command: mysqld –character-set-server=utf8mb4 –collation-server=utf8mb4_unicode_ci –init-connect=’SET NAMES utf8mb4;’ –innodb-flush-log-at-trx-commit=0
expose:
– “3306”
volumes:
– ./dockermysql:/var/lib/mysql:rw
environment:
– MYSQL_DATABASE=demodb
– MYSQL_ROOT_PASSWORD=123456
web:
build: .
command: python manage.py runserver 0.0.0.0:9000 –insecure
volumes:
– .:/leartd
ports:
– “8080:9000”
depends_on:
– db
command:执行的命令内容是为了给 mysql 指定字符编码,不指定时,默认使用的是 lanti1 编码,在使用中文字符的时候会乱码
四、修改项目 settings.py 文件配置
修改地方有两个,
1、
ALLOWED_HOSTS = [‘*’,]
2、
DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.mysql’,
‘NAME’: ‘demodb’,
‘USER’: ‘root’,
‘PASSWORD’: ‘123456’,
’HOST’: ‘db’,
}
}
这里的 NAME 就是 docker-compose.yml 文件中的 MYSQL_DATABASE,PASSWORD 为 docker-compose.yml 文件中的 MYSQL_ROOT_PASSWORD,HOST 为 docker-compose.yml 文件第三行的内容
五、编译项目
docker-compose build
六、启动项目
docker-compose up
或
docker-compose up -d(后台运行)
在浏览器中输入 localhost:8080 就可以成功访问项目了
七、附录
1、查看当前 docker 容器中已有的 image
docker image ls
2、查看所有的容器
docker ps -a
3、批量停止在运行中的容器
docker ps -a | grep ‘Up’ | awk ‘{print $1}’| xargs docker container stop
4、批量删除 Exited 状态的容器
docker ps -a | grep ‘Exited’ | awk ‘{print $1}’| xargs docker container rm
5、批量删除 name 为 none 的 image
docker image ls | grep none | awk ‘{print $3}’ | xargs docker image rm
八、未完全解决的问题:
通过 docker-compose up 运行项目后,首次需要去 web 容器里面手动执行 makemigrations、migrate、createsuperuser 命令。
暂时不知道怎么处理,如有大神路过还望指点一二
九、需要后续处理的问题:
搭建私有 registry,把镜像提交到私有的 registry。
: