什么是docker?

# docker
docker 是一构建容器的工具

# docker容器
通过内核虚拟化技术来提供容器的资源隔离和资源限制。所以docker容器在运行的时候,不要类似虚拟机额外的操作系统开销,从而比kvm虚拟机更轻量

# 注意
docker容器与容器之间是相互隔离的
# 安装docker

# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
# Step 3: 更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce

# Step 4: 开启Docker服务
sudo service docker start  # systemctl start docker

docker命令

# 刷新一下新增的yum源
yum makecache

# 更新系统除了内核
内核      yum      update        –y        --exclude=kernel*

# 临时修改开机启动docker
systemctl  enable  docker 

# 查看docker内部信息
docker info

# docker  启动nginx
docker run –d  --name nginx –p 80:80 nginx  # -d 后台运行    最后的nginx  起什么镜像  --name 指定的是该rongqi的名字

docker起nginx , linux起nginx的差别

httpd docker 文件夹_flask

docker默认配置的镜像站是国外

# 配置自己的镜像站
vim /etc/docker/daemon.json   # 默认是没有该文件的

# 添加内容
{
    "registry-mirrors":["https://registry.docker-cn.com"]
}

# 重启docker服务
systemctl restart docker

httpd docker 文件夹_httpd docker 文件夹_02

httpd docker 文件夹_docker_03

dock run 参数解释

httpd docker 文件夹_flask_04

学习docker的增删改查命令

# 增
1.从dockerhub  仓库中获取docker镜像,从github获取代码一样
	docker pull centos   # 去docker仓库中寻找centos系统镜像
    docker pull ubantu    # 获取乌班图镜像
# 删
1.删除本地镜像文件
docker rmi  镜像id(前三位即可)  # rmi  remove images

2.删除容器记录的名字的命令
docker rm 容器ID(前三位)

3.退出容器
exit

4.批量清空无用的docker容器记录,容器记录非常容易创建 docker run
docker rm  `docker ps -aq`  # 删除正在执行的容器

5.批量删除镜像
docker rmi `docker images`  # 批量删除镜像

6.停止容器的运行
	docker stop 容器的id
    
7.重启容器
	docker restart 容器的id
# 改

1.运行第一个docker的容器实例,运行镜像文件,产生容器进程
	docker run  镜像名字即可  # 如果docker容器中没有运行的进程,容器会直接挂掉
    
2.运行一个hello world 进程
	-docker pull hello-world  # 从docker镜像站拉去一个hello-word镜像
    -docker run hello-workd  # 运行该镜像
    
3.交互式的运行一个存活的docker容器 # centos
	docker run -it centos /bin/bash  # -it参数   -i 是交互式命令操作 -t开启一个终端   /bin/bash 指定shell解释器  
   	# 运行一个centos镜像,并且进入该容器
    							
4.运行一个活着的容器        # -d 后台运行  -c 执行shell语句
docker run -d centos /bin/bash -c "while true;do echo hello centos; sleep 1;done"

5.运行docker容器,且指定名字,便于管理
docker run --name "nginx" -d -p 81:81 nginx  # --name  必须写在 run后面,指的是该容器的别名
    
6.进入一个正在运行的容器
docker exec -it 容器id(容器别名) /bin/bash  # exec  进入容器

7. 如何进入容器空间内,修改容器内的环境,以及代码等内容,修改软件等操作,且提交镜像等,发送给其他人
	1.进入容器内部,安装一个vim或者是python3等步骤
    	docker run -it centos /bin/bash
        yum install wget -y
     2.安装好之后,退出容器
    	exit
     3.提交该容器,生成新的镜像文件
    	docker commit  容器id  hpy/centos-vim  # 提交容器id,生成镜像
        
8.导出你的docker环境,发送给同事
	docker save  镜像id  >  镜像的压缩文件.tar.gz  # docker save 5d94713f6dfc > ./wget.tar.gz  # 压缩文件
    
9.如何进行镜像导入
	docker load < 镜像压缩文件.tar.gz
	# 首次导入的时候,没有显示仓库名,标签名字,重新赋予一个即可
    docker tag  镜像ID   标签名字
    
10如何在容器内,运行一个python的web程序,需要 用到端口映射知识
	docker run -d -P training/webapp python app.py
    # -d 后台运行
    # -P 大写的P参数,作用是随机的端口映射
    # training/webapp  是镜像的名字,默认没有会去自己配的仓库下载
    # python app.py    代表启动容器后,让容器执行的命令是它
    
# 注意  宿主机和docker容器的端口映射
-P  # 大P是随机映射端口
-p 300:3000  # 小p  是指定 宿主机的300端口,映射到容器的3000端口
# 查
1.查看本地机器,所有的镜像文件内容
	docker images
    
2.查看docker 正在运行的进程
docker ps  # 查看docker容器中 正在运行的进程
docker ps -a # 查看docker容器中,所有运行过的进程,包括挂掉的进程 

3.查看容器内的运行日志
docker logs  容器id  # 查看容器内的日志
docker logs -f  容器id  # 实时刷新容器内的日志,例如监控nginx的日志信息

4.收索镜像
docker search flask  # 从配置的docker网站收缩是否有该镜像


5.查看当前运行的容器id
docker ps -aq

6.查看容器端口
docker port 容器id

curl

模拟发送http请求
curl  ip:port

yaml配置文件

# 你用过哪些格式的配置文件?
JSON
conf  # nginx.conf
ini  # uwsgi.ini
xml  # java
yaml  # 新式的配置文件,遵循pyhton的缩进语法

# 语法规则
大小写敏感
使用缩进表示层级关系
缩进时禁止使用tab键,只能空格
缩进的空格数量不重要,只要相同层级的元素左侧对齐即可
# 表示注释行

# yaml支持的数据结构
对象:键值对,也称为映射mapping 哈希hashes  字典dict      # 冒号表示  key : value   key冒号必须要有
数组:一组按次序排列的值,又称为序列sqquence  列表list    # 短横线  - list1
纯量: 单个不可再分的值

# 对象 : 键值对
python字典套字典   {'info':['name':'sun','age':18]}
yaml的配置文件写法  
	"s25":
        "男同学":
         -"sun"
         -"qwx"
        "女同学":
         -"howard"
         -"迪丽热巴"

httpd docker 文件夹_httpd docker 文件夹_05

httpd docker 文件夹_docker_06

后端开发人员

只需要掌握docker的容器,镜像,仓库的增删改查即可

dockerfile

# dockerfie
由于拉取的镜像不能作为正常使用,所以要私人定制

dockerfile 指令

# FROM  指令
FROM scratch  # 制作base image基础镜像,尽量使用官方的image作为base image
FROM centos  
FROM ubuntu:14.04  # 带有tag的base image
# LABEL标签,定义变量,定义作者信息
LABEL version="1.0"  # 容器元信息,帮助信息,Metadata,类似于代码注释
LABEL maintainer="huangpengyang@163.com"
# RUN是一个万能指令,你可以在docker中执行任意指令
# RUN 就是告诉容器要做哪些配置

RUN mkdir /sun
RUN cd /sun
RUN pwd
# WORKDIR  # 相当于linux中的cd命令,尽量使用绝对路径,!!!尽量不要使用 RUN cd
WORKDIR  /sun  # 如果没有就自动创建
# ADD指令用于添加宿主机的文件,拷贝到容器空间内
# 宿主机有自己的文件系统,文件夹,文件,目录等
# 容器内也有一套自己的文件系统,独立的文件信息
# 把宿主机的代码,拷贝到容器内
# ADD 还有解压缩的功能

ADD  and  COPY
ADD hello.txt  /  # 把宿主机的hello.txt 拷贝到容器内 /目录下
ADD test.tar.gz /  # 添加到根目录并解压
# COPY  # 是拷贝文件其实跟 ADD一样
ADD与COPY:
	-优先使用COPY命令
    -ADD除了COPY功能还有解压功能
# ENV  # 环境变量,尽可能使用ENV增加可维护性
ENV MYSQL_VERSION 5.6  # 设置一个mysql的常量  # 这里不需要使用=号
RUN  yum install -y mysql-server=MYSQL_VERSION

# 如何编写dockerfile

构建镜像的步骤

1.准备一个flask代码,检查需要哪些依赖步骤
	vim  flask_run.py
	from flask import Flask
    app = Flask(__name__)
    
    @app.route('/')
    def hello():
        return 'hello'
    if __name__ =="__main__":
        app.run(host="0.0.0.0",port=8080)
        
        
2.安装flask模块,在宿主机试试能否执行上面的代码
	pip install flask
    python flask_run.py
    
3.编辑dockerfile脚本,注意名字必须是大写的 Dockerfile
touch Dockerfile  # 创建文件
vim Dockerfile  # 编写文件
	FROM  python  # 指定dockerhub提供好的python镜像,已经安装好了python3,很好用
    RUN  pip3 install -i https://pypi.douban.com/simple flask  # 在容器内安装flask模块
    ADD flask_run.py /opt  # 把宿主机的代码拷贝到容器
    WORKDIR  /opt  # 目录切换
    EXPOSE   8080  # 指定容器端口
    CMD   ["python3","flask_run.py"]  # 容器执行的命令  # RUN  python flask_run.py
    
3.5 检查准备好的代码,以及dockerfile文件
	
4.构建dockerfile,生成镜像    
	docker build .

5.检查docker的镜像是否生成  # 默认创建出来的镜像灭有名字的

6.给新镜像添加名字
	docker tag 容器id  名字
    
7.运行该镜像文件
	docker run -d -p 8000:8080  容器id

dockerhub的使用

httpd docker 文件夹_httpd docker 文件夹_07

操作

httpd docker 文件夹_httpd docker 文件夹_08