docker基础一

一.Docker基本概念

1.三大概念
image镜像:docker 镜像就是安装文件,你从网上下载的 exe 或其它文件
container容器:容器就是你安装到本机的程序,可理解为运行中的镜像
Replsitory仓库:就是你下载软件的地方,可理解为git仓库
2.其他
docker的核心是隔离。容器就是添加了隔离机制的进程
docker的运行模式是C/S。我们本机是C,docker引擎是S

二.命令

1.镜像操作
docker search 镜像名称\id     # 搜索远程库中的可用镜像
docker pull 镜像名称          # 拉取
docker images  			    # 查看本地所有镜像
docker rmi "镜像id"          # docker删除镜像
docker save -o 导出路径 镜像id    #导出镜像
docker load -i 镜像文件           #导入镜像
docker tag 镜像id 新镜像名称:版本  #修改镜像名称
2.容器操作
#1.运行容器(-it:交互 -d后台)
docker run -it 镜像id|镜像名称   
	#例子:docker run -d -p 宿机端口:容器端口 --name  起别名  镜像标识|镜像名称
	#-d表示后台运行  -p表示宿机与容器间的映射端口  --name表示给容器指定的命名

#2.查看正在运行的容器
docker ps  #查看运行中的容器
docker ps -a #查看所有容器 包括未运行的
docker ps -q #查看容器的标识

#3.查看容器日志
docker logs -f 容器id
-f表示查看最后几行

#4.在容器内部运行脚本
docker exec -it 容器id /bin/sh
	#进入容器之后可使用shell命令:例:ls\cd\mkdir等等,退出exit

#5.启动容器
docker start 容器id

#6.将主机中的文件放入容器中的方式
docker cp 文件名称 容器id:容器内部的路径
    
#7.一条命令停用并删除容器
docker stop $(docker ps -q) & docker rm $(docker ps -aq)
3.安装

docker安装(参考https://www.runoob.com/docker/centos-docker-install.html),这里选择自动安装

curl -sSL https://get.daocloud.io/docker | sh

安装好之后启动docker服务

systemctl start docker

测试执行hello-world镜像,会先从本地找,找不到会从远程库中找

如果没有设置远程库,修改/etc/docker/daemon.json如下

 {
   "registry-mirrors": ["https://registry.docker-cn.com"]
 }

三.Dockerfile

Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,具体参考:https://www.cnblogs.com/panwenbin-logs/p/8007348.html,例子:当python镜像构造成功之后,直接运行容器用run,要进入容器内部执行某个脚本用exec,两者作用相同

每个镜像都有其对应的dockerfile文件,要想构建新的容器,需要新建一个文件夹,文件夹中新建Dockerfile文件,然后在此路径下docker build -t 自定义镜像名称 . 也可以使用-f参数指定Dockerfile文件docker build -f /path/to/a/Dockerfile

在一个Dockerfile里面不能有多个基础镜像,也就是下面这种写法(不可取)

FROM image1
FROM image2
1.CMD

是在docker run时进行,RUN是在docker build时候运行,如果一个文件中有多行CMD命令,仅仅最后一行的生效,格式:CMD [xx,xx]

CMD ["shell命令"]
CMD ["可执行文件或命令","param1","param2"]   #一般文件都是xx.sh,需要给其赋予执行权限
CMD ["param1","param2"] # 该写法是为ENTRYPOINT指令指定的程序提供默认参数

例子

FROM python:3.6.5
RUN mkdir /code
WORKDIR /code
ADD . /code
RUN pip install -r /code/requirements.txt
CMD ["build.sh","参数"]
#***build.sh内容:
docker run -p 80:8000 -d guoqing:test /bin/bash -c "python manage.py runserver 0.0.0.0:8000"
后面直接运行build.sh即可
2.ENTRYPOINT
FROM nginx:test
ENTRYPOINT ["nginx","-c"] # 定参
CMD ["/etc/nginx/nginx.conf"]

#不传参运行 docker run nginx:test,容器内会默认运行nginx -c /etc/nginx/nginx.conf
#传参运行 docker run nginx:test -c /etc/nginx/new.conf,容器内会默认运行nginx -c /etc/nginx/new.conf

例子1

FROM python:3.6.5
ENTRYPOINT ["python","/code/manage.py"]
RUN mkdir /code
WORKDIR /code
ADD . /code
RUN pip install -r /code/requirements.txt
CMD ["runserver","0:8000"]
#当运行docker run -it guoqing:text 时相当于python /code/manage.py runsever 0:8000
3.RUN

RUN命令两种格式,一种是shell,一种是exec,和docker运行容器中的run无关

RUN 命令  # RUN ./test.php dev offline
RUN ["./test.php", "dev", "offline"] # 相当于RUN ./test.php dev offline
4.ENV

ENV用来设置环境变量,设置了环境变量之后,在之后的指令中可用$xx使用

ENV NODE_VERSION 7.2.0

RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz" \
  && curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc"

四.镜像合并

通常我们需要一个镜像中处理多件事情,例如部署django项目,一个镜像中可能需要包含python、mysql、redis等功能,但通常来说我们都是多个容器共同处理一个项目(例如python有其对应的容器、mysql有其对应的容器),那么改如何将其独立的容器合并为一个呢?我们都知道每个容器的构建都需要其对应的Dockerfile文件,只需要将其Dockerfile文件合并重新build即可得到新的容器。

https://www.cnblogs.com/shiningrise/p/5820426.html

五.多镜像导出导入

导出

docker save image1 image2 > images.tar

导入(确保没有此tar中的镜像)

docker load --input images.tar

六.docker-compose

1.简介

docker-compose用来单机上编排容器(定义和运行多个容器,使容器互通)

通常情况下,我们会为python、django、mysql等各自构建一个容器(是为了之后方便维护),让这些容器为同一个项目服务,但是我们不能一个一个容器执行run命令吧,这样太麻烦了,这就引入了docker-compose。docker-compose是 docker 官方的开源项目,使用 python 编写,实现上调用了 Docker 服务的 API 进行容器管理

docker-compose将所管理的容器分为3层结构:project service container

一份标准配置文件应该包含 version、services、networks 三大部分

2.文件详解
Compose和Docker兼容性:
    Compose 文件格式有3个版本,分别为1, 2.x 和 3.x
    目前主流的为 3.x 其支持 docker 1.13.0 及其以上的版本

常用参数(参考:https://www.jianshu.com/p/90bf0e231e5a)

version    # 指定 compose 文件的版本
services   # 定义所有的service信息,services下面的第一级别的key就是一service 的名称,一个service代表一个容器
	build   # 指定构建上下文的路径
	command # 覆盖启动容器后默认执行的命令
	volumes # 通常在项目所在容器的service中使用(容器中项目所存放路径)
    

3.安装

默认情况下,windows 和 mac 下的 docker 已经自带了 docker-compose 工具,可以使用 docker-compose -v 命令查看,linux系统下使用

curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

4.使用

三个步骤

1.新建Dockerfile文件,文件中主要导入项目所需模块
2.docker-compose.yml文件中声明程序的服务,比如webapp,mysql、redis
3.执行docker-compose up来启动运行

命令(安装docker-compose并为脚本赋予执行权限)

1.curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
2.sudo chmod +x /usr/local/bin/docker-compose

查看安装是否成功

docker-compose -v

列出所有运行容器

docker-compose ps

查看服务器日志输出

docker-compose logs

https://www.cnblogs.com/xiaonq/p/12377099.html

1.port和expose区别

2.关闭防火墙之后nginx启动不了

3.dockerfile用到的所有文件路径都是在容器中可以找得到的

4.每个容器下面都是和linux目录相同的目录结构

posted @ 2020-09-01 20:51  MISF  阅读(3)  评论(0编辑  收藏  举报
     JS过度和变形效果演示   
  
    html5.png