docker代码发布

Docker简介:

  1. Docker 相比于 虚拟机具有空间占用小,启动速度快(按秒级), 集成度高,可以有效避免版本不兼容问题。

  2. 什么是镜像:镜像是一堆只读层的统一,除了最底层没有指向外,每一层都指向它的父层。统一文件系统( Union File System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在。在用户的角度看来,只存在一个文件系统。镜像每一层都是不可写的,都是只读层。
    什么是容器:容器(container)的定义和镜像(image)几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。要点:容器 = 镜像 + 读写层,并且容器的定义并没有提及是否要运行容器。
    建议实践之后回来理解docker容器与镜像的区别

  3. 常用操作
    docker images :查看所有镜像
    docker rmi image-id:删除镜像
    docker ps -a:查看所有容器
    docker rm container-id:删除容器
    docker attach container-id:进入容器 (现在基本使用exec,退出不关闭容器)
    docker logs container-id 查看容器内部输出
    docker tag imageid:tag name:tag 修改镜像名
    docker commit:将容器的可读写层转换为一个只读层,这样就把一个容器转换成了不可变的镜像。

  4. alpine

正文:Django项目发布

1.创建文件树

compose
——downline(线下)
—Dockerfile (构建镜像文件)
—pip.conf (加速pip下载速度)
—AIRS (项目文件)
—requirements.txt (安装目录)
—start.sh (启动文件)
——upline(线上)
2.git clone *** 将项目文件存放到AIRS下
3.cp ./AIRS/requireme ./requirements 将要安装的requirements文件保存到与Dockerfile同目录下
4.编写pip.conf文件 vim pip.conf


[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
~                                                        

5.编写start.sh vim start.sh

python manage.py runserver 0.0.0.0:8000

6.编写Dockerfile文件

#基础镜像 docker pull python:3.6
FROM python:3.6		
#定义环境变量
ENV PYTHONUNBUFFERED 1
#将pip.con转移到新镜像的 /root/.pip/pip.conf
COPY pip.conf /root/.pip/pip.conf
#将项目存放到/app文件夹下
COPY AIRS/ /app
#将需要下载的requirements.txt放入工作目录/app下
COPY requirements.txt /app/requirements.txt
#开始下载依赖包
RUN pip install -r /app/requirements.txt
#确定工作目录
WORKDIR /app

#将启动文件放入镜像
copy ./start.sh /app/start.sh
RUN chmod +x /app/start.sh
CMD ["sh", "start.sh"]

7.创建镜像

#docker build -t="用户名/镜像名称:版本(tag) "   .(当前目录)
docker build -t="horn/airs:v1.0" .

在这里插入图片描述

8.启动容器

#-d 后台运行
#-i 打开STDIN,用于控制台交互
#-t 分配tty设备,该可以支持终端登录,默认为false
#-p  指定容器暴露的端口
#-u 指定容器的用户
#--name 给容器起别名
[root@horn downline]# docker run -d -p 1935:8000  horn/airs:v1.0  python manage.py runserver 0.0.0.0:8000
#显示所有容器
docker ps -a 

在这里插入图片描述

9.启动成功,但是外部无法访问
法一:通过复制修改容器中的文件,缺点(麻烦)

#将当前目录settings.py 复制到 containerid:/app/推荐系统/settings.py
docker cp ./settings.py 7ed:/app/推荐系统/settings.py

法二:直接进入容器修改配置文件,缺点是需要安装vim,增加容器占用空间

docker run -i –t centos /bin/bash
or
docker exec  -it container-id /bin/bash  
#获取docker镜像root权限
sudo docker exec -ti -u root container-id  /bin/bash 

#退出后重启容器: docker restart container

10.Docker仓库
(1)docker login
在这里插入图片描述

(2)根据docker账号修改镜像名 ——>用户名/镜像名

docker tag imageid:tag name:tag

在这里插入图片描述
(3)将镜像存到docker仓库中

docker push 用户名/镜像名

在这里插入图片描述

11.修改镜像

sudo docker commit -m 'modify settings.py' -a "docker horn1998" 9c54 horn1998/airs:v2.0
其中,-m 来指定提交的说明信息,跟我们使用的版本控制工具一样;-a 可以指定更新的用户信息;之后是用来创建镜像的容器的 ID 9c54;最后指定目标镜像的仓库名和 tag 信息。创建成功后会返回这个镜像的 ID 信息在这里插入图片描述在这里插入图片描述
12.docker-compose
1.极速安装

curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version

2.变量解释

  • image: 指定镜像名称或ID,如果镜像本地不存在,则Compose会尝试拉取这个镜像
image: python:3.6-alpine
  • build: 基于Dockerfile构造镜像
    • args: 定义构建过程中,多位于sh文件中所需要的环境变量,但在构建成功后会取消
e1:build: .	#当前目录下寻找Dockerfile,如果同时指定了build, image,则Compose会构建镜像并且把镜像命名为image对应的名字
e2:build:
		context:.
		args:
			build:1	
			password: secret		
  • command:时候可以覆盖容器启动后默认执行的命令
command: python manage.py runserver 0.0.0.0:8000
  • depends_on:容器启动顺序有要求,控制容器的启动顺序,防止因容器依赖问题而启动失败
depends_on:
	-db #其它服务名称
  • CMD: 启动容器后,提供默认命令及参数 (不一定会执行,只是默认) 会docker run 后面参数替换
    CMD在容器运行的时候提供一些命令及参数,用法如下:
    第一种用法:运行一个可执行的文件并提供参数。
    CMD [“sh”, “start.sh ”]
    第二种用法:为ENTRYPOINT指定参数。
    CMD [“param1”,“param2”]
    第三种用法(shell form):是以”/bin/sh -c”的方法执行的命令。
    CMD [“/bin/echo”, “this is a echo test ”]
    一个dockerfile至多只能有一个cmd,如果有多个,只有最后一个生效。

  • ENTRYPOINT: 启动容器时执行(一定会执行)

  • entrypoint与cmd的区别
    一般还是会用entrypoint的中括号形式作为docker 容器启动以后的默认执行命令,里面放的是不变的部分,可变部分比如命令参数可以使用cmd的形式提供默认版本,也就是run里面没有任何参数时使用的默认参数。如果我们想用默认参数,就直接run,否则想用其他参数,就run 里面加参数。
    原文链接:https://blog.csdn.net/u010900754/article/detaills/78526443
  • external_links:连接不再docker-compose.yml中定义的容器
  • links:解决容器之间的连接问题
  • ports:映射端口的标签
ports:
		- "8000:8000"
  • volumes
    volume保证Docker的数据持久化, 即使数据不随着container的结束而结束,数据存在于host机器上——要么存在于host的某个指定目录中,要么使用docker自己管理的volume。
volumes:	
		#此时docker将自动创建一个匿名的volume,并将其挂载到container中的/mysql目录。
		- /var/lib/mysql
		#如果文件不存在,则docker会自动创建
		- /opt/data:/var/lib/mysql

3.样例代码

version: '2'
services:
                ssm:
                        build: .
                        ports:
                                - "1935:8000"
                        image: horn1998/ssm:v2.0
                        command: sh start.sh
                        depends_on:
                               - mysql
                        volumes:
                               - /opt/data:/app/data
                        links:
                               - mysql
                mysql:
                        image: mysql:latest
                        ports:
                                - "3306:3306"
                        command: service mysql start

4.启动compose:

docker-compose up -d
发布了16 篇原创文章 · 获赞 1 · 访问量 383

猜你喜欢

转载自blog.csdn.net/qq_41174940/article/details/86107999
今日推荐