docker主机(Host):安装了Docker程序的机器(Docker直接安装在操作系统之上);
docker客户端(Client):连接docker主机进行操作﹔
docker仓库(Registry):用来保存各种打包好的软件镜像﹔
docker镜像(Images):软件打包好的镜像﹔放在docker仓库中;
检查内核版本,必须是3.10及以上 【uname ‐r】
安装docker:【yum install docker 】 输入y确认安装
启动docker 【systemctl start docker 】查看版本【docker ‐v】
开机启动docker 【systemctl enable docker】
停止docker 【systemctl stop docker】
------------------------------
感觉:镜像就像安装包,容器就是安装的应用程序
docker安装:
yum包更新 【sudo yum update】
安装软件包yum-util提供yum-config-manager功能【sudo yum install -y yum-utils device-mapper-persistent-data lvm2】
设置yum源 【sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo】
安装docker 【sudo yum install docker -ce】
查看版本:【docker -v】
启动docker 根据linux版本进行相应命令
Docker默认仓库地址是Docker Hub官网地址
设置ustc镜像便于docker拉取某些需要的镜像 ustc:老牌linux镜像服务提供者 ustc的docker镜像加速器速度很快
- 编辑文件【vi /etc/docker/daemon.json】
- 输入内容
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
【docker info】docker概要信息
【docker --help】 docker帮助文档
镜像命令
镜像是构建docker的基石,可以将镜像当做容器的源代码 体积小,便携,易分享存储和更新
由于镜像可能重名(如版本不同),所有通过tag即标签区分
镜像可以从所设置的源中拉取
【docker images】 查看镜像
【docker search 镜像名称】 搜索镜像
【docker pull 镜像名称】 拉取镜像
【docker rmi 镜像id】 删除镜像 镜像有运行中的容器时不能删除
【docker rmi 'docker images -q'】 删除全部镜像
容器命令
启动容器:【docker run --name 自己给容器随便取个名称(--name和这里的名称可省) -p 主机端口:容器端口 -d 容器名称:标签】 标签即相当于版本,latest标签即最新的意思
简单启动【docker run -d 容器名称:标签】
[-p]为端口映射 [-d]为后台运行
- 1-创建容器=交互式
【docker run -it --name 容器名称 镜像名称:标签 /bin/bash 】交互式创建容器后即进入到容器
-i:表示运行容器
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
每个容器相当于一个小电脑(服务器)【exit】 退出到宿主机位置 容器停止
- 2-创建容器=守护式
【docker run -id --name 容器名称 镜像名称:标签】
【exec -it 容器名称或id /bin/bash】 进入容器
【exit】 退出到宿主机位置 容器不停止
【docker ps】 查看正在运行的容器
【docker ps -a】 查看所有容器
【docker ps -l】 查看最后一次运行的容器
【docker start 容器名称(id)】启动容器
【docker stop 容器名称(id)】 停止容器
【docker cp 待拷贝文件路径 容器名称:路径】文件拷贝 宿主机到容器 容器关闭时也可以正常拷贝文件进去
- 查看容器ip:
【docker inspect 容器名称】 显示一推信息
【docker inspect --format='{{.NetWorkSettings.IPAddress}}' 容器名称 】 直接显示ip地址,其他信息也可以这样显示 - 删除容器:
【docker rm 容器名称】 需要停止容器后才能进行移除
目录挂载:宿主机目录和容器目录形成映射关系
创建容器时加-v参数 后边为 宿主机目录:容器目录 如:
【docker run -id --name=mycentos3 centos:7 -v /usr/local/myhtml:/usr/local/myhtml】
【docker run -id -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7】也可以
目录挂载后,操作宿主机的目录即操作容器的目录
docker搭建应用环境:
-
mysql部署:
--拉取镜像:【docker pull centos/mysql-centos7】 后面即mysql路径
--创建容器:【docker run -di --name=tensquare_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=密码 镜像名称】
-p 端口映射 操作宿主机33306端口即相当于操作容器的3306端口
MYSQL_ROOT_PASSWORD= 指定mysql密码
--mysql图形化界面软件即可进行mysql连接(通过宿主机来连接容器中的mysql) 需要:宿主机ip 密码 用户名 端口==映射的宿主机的端口如33306 -
tomcat部署:
--拉取镜像 pull
--创建容器 【docker run -di --name=mytomcat -p 9000:8080 -v /usr/local/webapps:/usr/local/webapps tomcat:7-jre7】
使用目录挂载后由于做了目录映射,直接在网页访问tomcat是无法直接访问的,可以把war包上传到目录下进行访问 -
nginx部署:
--拉取镜像 pull
--创建容器 【docker run -di --name=mynginx -p 80:80 nginx】 -
redis部署:
--拉取镜像 pull
--创建容器 【docker run -di --name=myredis -p 6379:6379 redis】
--测试:客户端进入cmd -》redis-cli -h 远程ip -》连接成功,存储查询正常即完成。
【docker commit 容器名称 镜像名称】 将容器保存为镜像
【docker run -di --name=myxxx -p 宿主机端口:容器端口 自己容器所保存的镜像名称】
基于自己容器创建的镜像创建容器,该新建的容器默认包含自己容器所拥有的资源,因为是基于其创建的
【docker save -o 文件路径 镜像名称】 镜像导出为镜像文件
【docker load -i 文件路径】 镜像文件恢复为镜像
Dockerfile:
一系列命令和参数构成的脚本 这些命令应用于基础镜像并最终创建一个新的镜像
存在意义:更方便构建镜像文件
--开发:提供一个完全一致开发环境
--测试:直接拿开发时构建的镜像或通过dockerfile文件构建一个镜像开始工作
--运维:部署时可以实现应用无缝移植
【from image_name:tag】定义使用哪个基础镜像启动构建流程
【maintainer user_name】声明镜像创建者
【env key value】设置环境变量(可写多条)
【run command】dockerfile的核心部分(可写多条)
【add source_dir/file dest_dir/file】宿主机文件复制到容器内 如果是压缩文件,复制后会自动解压
【copy source_dir/file dest_div/file】和add类似,但有压缩文件不会被解压
【workdir path_div】 设置工作目录
例子:构建jdk1.8镜像 基于centos:7
--创建目录 上传jdk的tar包 进入目录
--构建dokerfile文件 名称必须叫Dockerfile 进入文件
--编写文件 保存
FROM centos:7
MAINTAINER xiaoai
WORKDIR /usr
RUN mkdir /usr/local/java
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre7
ENV CLASSPATH $JAVA_HOME/bin/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
【docker build -t='jdk1.8' Dockerfile所在目录】 所在当前目录则用 .
表示 通过Dockerfile构建镜像
docker私有仓库
私有仓库存放镜像,中央仓库存放通用镜像,私有仓库可以存放自己所构建的镜像,便于同一局域网的使用
--拉取私有仓库镜像 【docker pull registry】
--创建容器即创建私有仓库 【docker run -di --name=registry -p 5000:5000 registry】
--网页访问仓库【宿主机ip:容器创建时映射的端口/v2/_catalog】 访问到json数据即私有仓库创建成功
--修改配置文件使docker信任私有仓库才能上传镜像到私有仓库【vi /etc/docker/daemon.json】添加配置:
{
"insecure_registries":["私服ip地址:端口"]
}
重启docker服务
镜像上传到私有仓库
【docker tag 镜像名称 私服ip和端口/镜像名称】如【docker tag jdk1.8 192.168.x.x:5000/jdk1.8】打标签 相当于复制一个镜像为上传做准备
【docker push 私服ip和端口/镜像名称】 如【docker push 192.168.x.x:5000/jdk1.8】 上传镜像到私服
访问私服可以查看到上传的镜像
获取镜像 【docker pull 私服ip和端口/镜像名称】