docker
前言:
Docker是基于Go 语言 并遵从Apache2.0协议开源,
Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到
任何流行的 Linux 机器上,也可以实现虚拟化.
-docker:是一个开源的应用容器引擎 c/s 架构程序
优点:
1.更快速的交付和部署
2.更高效的虚拟化
3.更轻松的迁移和扩展
4.更简单的管理
docker安装:
安装前的准备:
-1. yum 包更新到最新: sudo yum update
-2. 安装需要的软件包: sudo yum install -y yum-utils device-mapper-persistent-data lvm2
-3. 换源: sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/
linux/centos/docker-ce.repo
安装:sudo yum install docker-ce
查看docker版本: docker -v
设置ustc的镜像:
编辑该文件: vi /etc/docker/daemon.json
在该文件中输入如下内容:
{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]}
启动docker: systemctl start docker
停止docker: systemctl stop docker
重启docker: systemctl restart docker
查看docker状态: systemctl status docker
开机启动: systemctl enable docker
查看docker概要信息: docker info
查看docker文档: docker --help
容器与虚拟机的区别:
容器:是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统;
虚拟机:则是在硬件层面实现。
-重点:
-镜像(image):镜像当做容器的源代码
-镜像操作:
查看镜像: docker images
搜索镜像: docker search 镜像名称
拉取镜像: docker pull 镜像名称
eg: docker pull centos:7
删除镜像: docker rmi 镜像ID
删除所有镜像: docker rmi `docker images -q`
-容器(container):一个一个的操作系统
-容器操作:
查看正在运行的容器: docker ps
查看所有容器: docker -a
查看最后一次运行的容器: docker ps -l
查看停止的容器: docker ps -f status=exited
停止容器: docker stop 容器名称(或者容器ID)
启动容器: docker start 容器名称(或者容器ID)
退出当前容器: exit
文件拷贝:(考进去) docker cp 需要拷贝的文件或目录 容器名称:容器目录
(考出来) docker cp 容器名称:容器目录 需要拷贝的文件或目录
目录挂载: 创建容器 添加-v参数 后边为 宿主机目录:容器目录
匿名挂载:-v映射时只写了容器内的路径,没写容器外的路径
具名挂载:-v 卷名:容器内路径
指定路径挂载: -v /本地路径:容器内路径
eg:docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7
查看容器IP地址: docker inspect 容器名称(容器ID)
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)
删除容器: docker rm 容器名称(容器ID)
创建容器: docker run
交互式创建: docker run -it --name=容器名称 镜像名称:标签 /bin/bash
守护式创建: docker run -di --name=容器名称 镜像名称:标签
登录守护式容器方式: docker exec -it 容器名称 (或者容器ID) /bin/bash
注:创建容器常用参数说明:
-i:表示运行容器
-t:表示容器启动后会进入其命令行
--name :为创建的容器命名
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口
-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。
注:两者兼得关系 就好比 类(镜像) --> 对象(容器)
docker 数据卷:
让容器间数据共享:
docker容器中产生的数据,同步到本地
卷技术:目录的挂载,将我们容器内的目录,挂载到linux上面
目的:容器的持久化和同步操作
数据卷容器: volume-from 实现容器间的数据共享
结论:
容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器为止
但是一旦你持久化到了本地,这个时候,本地的数据是不会删除的
dockerfile命令:
CMD与ENTRYPOINT区别:
cmd:指定这个容器启动的时候运行命令,只有最后一个生效,可被替代
entpypoint:指定这个容器启动的时候运行命令,可以追加命令
docker网络:
docker0:docker自带的路由 不支持容器名 进行访问
docker中的所有网络接口都是虚拟的,虚拟的转发效率高
只要容器已删除,对应的网桥一对就没了
docker0:默认域名不能访问,要link打通
--link: (新手使用) 不建议使用
场景:容器1 跟 容器2 连接
正向可以ping通过,反向不行
本质:在hosts配置中增加了配置
自定义网络:docker已经帮我们维护好了对应的关系 (推荐使用)
查看所有网络: docker network ls
bridge: 桥接docker(默认)
none: 不配配置网络
host: 和宿主机共享网络
containe: 容器间 网络连接 (局限大)
--driver bridge
--subnet 192.168.0.0/16
--getway 192.168.0.1
eg:docker network create 上面三参数
优点:
redis:不同集群使用不用网络,保证集群是安全和健康的
mysql:不同集群使用不用网络,保证集群是安全和健
网络连接:
1.容器跟网络连接 docker network connect
联通后将 容器名 放到了 网络下
一个容器两个ip
docker实例:
安装Nginx:
拉取镜像:docker pull nginx
创建容器:docker run -di --name=mynginx -p 80:80 nginx
安装mysql:
拉取镜像:docker pull centos/mysql-57-centos7
创建容器:docker run -di --name=mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
注:-p 代表端口映射,格式为 宿主机映射端口:容器运行端口
-e 代表添加环境变量 MYSQL_ROOT_PASSWORD 是root用户的登陆密码
远程登录mysql 连接宿主机的IP ,指定端口为33306
安装redis:
1>
拉取镜像:docker pull redis
创建容器:docker run -di --name=myredis -p 6379:6379 redis
2>1.拉取镜像 docker pull redis
2.创建conf与data文件夹
3.在充分中创建 redis.conf,内部写入
bind 0.0.0.0 #绑定地址
daemonize NO
protected-mode no #允许远程连接
requirepass 123456 #密码
4.docker run -p 6379:6379 --name=myredis
-v /home/test/redis/conf/redis.conf:/etc/redis/redis.conf
-v /home/test/redis/data:/data -d redis:alpine3.11 redis-server /etc/redis/redis.conf
--appendonly yes # 默认持久化方式
高级使用:
迁移与备份:
-1.容器保存为镜像: docker commit mynginx mynginx_i
-2.镜像备份(tar文件): docker save -o mynginx.tar mynginx_i
-3.恢复与迁移:
-1.删除掉mynginx_img镜像
-2.docker load -i mynginx.tar
Dockerfile:
定义:是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像(本质:dockerfile能生成镜像)
注: 文件名必须叫dockerfile
1、对于开发人员:可以为开发团队提供一个完全一致的开发环境;
2、对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了;
3、对于运维人员:在部署时,可以实现应用的无缝移植
命令:
FROM image_name:tag :定义了使用哪个基础镜像启动构建流程
MAINTAINER user_name :声明镜像的创建者
ENV key value :设置环境变量 (可以写多条)
RUN command :是Dockerfile的核心部分(可以写多条)
eg:

WORKDIR path_dir :设置工作目录
ADD source_dir/file dest_dir/file :将宿主机的文件复制到容器内
注:如果是压缩文件,会在复制后自动解压
COPY source_dir/file dest_dir/file :和ADD相似,但是如果有压缩文件并不能解压
使用脚本创建镜像:
-1.创建目录: mkdir –p /usr/local/dockerdjango
-2.创建文件Dockerfile: vi Dockerfile
-3.相关配置
#依赖镜像名称和ID
FROM python:3.6
#指定镜像创建者信息
MAINTAINER TEST
#切换工作目录
WORKDIR /usr
RUN mkdir /usr/local/mydocker
RUN pip install django==1.11.9
ENV PATH $JAVA_HOME/bin:$PATH
-4.执行命令构建镜像: docker build -t='django1.11.9' .
注: 空格yu.不能省略
-5.查看镜像是否建立完成: docker images
docker私有库:
搭建与配置:
-1.拉取私有仓库镜像: docker pull registry
-2.启动私有仓库容器: docker run -di --name=registry -p 5000:5000 registry
-3.查看是否成功:
打开http://192.168.1.12:5000/v2/_catalog看到{"repositories":[]} 表示私有仓库搭建成功并且内容为空
-4.修改daemon.json
vi /etc/docker/daemon.json 下 添加 {"insecure-registries":["192.168.1.12:5000"]}
保存,退出 让 docker信任私有仓库地址
-5.重启docker 服务 systemctl restart docker
镜像上传私有库:
-1.标记此镜像为私有仓库的镜像
docker tag django2.0 192.168.1.12:5000/django2.0
-2.再次启动私服容器: docker start registry
-3.上传标记的镜像: docker push 192.168.1.12:5000/django2.0