Docker
-
Docker简介
虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。 Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次封装,到处运行”。
-
沙箱机制
一、沙箱是什么? 沙箱是一个虚拟系统程序,沙箱提供的环境相对于每一个运行的程序都是独立的,而且不会对现有的系统产生影响。 二、沙箱的应用 (1)搭建测试环境。沙箱的应用只能访问自己的应用访问目录,而不能应用之间的资源进行共享,这样就形成了一个相对安全的机制,由于沙箱具有非常良好的独立性、隔离性,所以能够搭建一些具有高风险的软件进行测试。 (2)应用容器的利用,如Docker就是完全使用沙箱机制,这样使得应用组件经过Docker的封装,可以随意移植到服务上。
-
镜像和容器
镜像:类似虚拟机的root文件系统 提供容器运行时所需的程序 库 资源 配置等文件 (还包括匿名卷 环境变量 用户) 容器: 运行和隔离应用 是镜像运行的实体 类似面向对象设计 镜像是静态的定义 容器是镜像运行时的实体 仓库:集中存放镜像的地方
-
镜像的相关命令
docker images:查看所有镜像 Docker var/lib/docker:存放镜像的位置 docker search 镜像名称:搜索镜像 docker pull 镜像名称:拉取镜像 docker rmi -f 镜像ID 强制删除镜像 docker rmi -f 镜像名1:TAG 镜像名2:TAG ->删除多个镜像 docker rmi -f $(docker images -qa)
-
容器的相关命令
docker ps:查看正在运行的容器 docker ps -a:查看所有的容器 docker ps -l:查看最后一次运行的容器 docker ps -f status=exited:查看停止的容器 -i:表示运行容器 -t:表示容器启动后会进入命令行 --name:为创建的容器命名 -v:表示目录映射关系 目录挂载 -d:在run后 不会进入容器,守护方式的容器在后台运行 -p:表示端口映射 前者是宿主机的端口,后者是容器内的映射端口 /bin/bash:放在镜像后的命令 这里希望有一个交互式的shell exit:退出 Ctrl+q+p:退出容器不停止 ================ 1.交互式方式创建容器 docker run -it --name=xx centos:7 /bin/bash 2.创建后台容器 docker run -id --name=嘻嘻嘻 centos:8 3.进入容器:docker attach 容器Id docker exec -it 容器名 /bin/bash 4.启动和停止容器: docker stop 容器名称/Id docker start 容器名称/Id 5.文件拷贝:docker cp 文件 容器名称:容器目录 docker cp 容器名:容器目录 需要拷贝到的地方 6.目录挂载: docker run -id --name=容器名 -v Linux中的目录:容器中的目录;操作Linux的目录相当于操作容器中的目录 7.删除容器:docker rm 容器名/Id;-f强删 8.停止容器:stop 9.重启:restart
-
应用部署
1.MySQL部署 docker run -di --name=mysql5.7 -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 centos/mysql-57-centos7 -e 添加环境变量 2.Tomcat部署 docker run -id --name=xxx -p port:port -v linux目录:容器目录 3.Nginx部署 docker run -id --name -p port:port nginx镜像 4.Redis部署 docker run -id --name=xxx -p port:port redis镜像
-
迁移和备份
1.容器保存为镜像:docker commit 容器名称 镜像名称 2.镜像保存为tar文件:docker save -o tar文件名 镜像名 3.镜像恢复和迁移:docker rm 镜像名/id docker load -i 保存的镜像tar
-
Dockerfile
Dockerfile其实就是一个文本文件,由一系列命令和参数构成,Docker可以读取Dockerfile文件并根据Dockerfile文件的描述来构建镜像。
-
Docker私有仓库
1.启动私有仓库 docker run -di --name=registry -p port:port 镜像名 2.修改daemon.json vi /etc/docker/daemon.json "insecure-registries":["ip地址"] 目的是让容器信任ip地址 3.重启:systemctl restart docker 4.上传到私有库: #标记镜像为私有仓库的镜像 docker tag jdk1.8 id/jdk1.8 重启私有仓库容器: docker start registry 上传标记的镜像: docker push ip/jdk1.8 拉取 pull ip/镜像名
-
镜像发布
1. 登录阿里云Docker Registry $ docker login --username=牧者心牧天下 registry.cn-hangzhou.aliyuncs.com 用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。 您可以在访问凭证页面修改凭证密码。 2. 从Registry中拉取镜像 $ docker pull registry.cn-hangzhou.aliyuncs.com/mytest_sun/jdk:[镜像版本号] 3. 将镜像推送到Registry $ docker login --username=牧者心牧天下 registry.cn-hangzhou.aliyuncs.com $ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/mytest_sun/jdk:[镜像版本号] $ docker push registry.cn-hangzhou.aliyuncs.com/mytest_sun/jdk:[镜像版本号] 请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。 4. 选择合适的镜像仓库地址 从ECS推送镜像时,可以选择使用镜像仓库内网地址。推送速度将得到提升并且将不会损耗您的公网流量。 如果您使用的机器位于VPC网络,请使用 registry-vpc.cn-hangzhou.aliyuncs.com 作为Registry的域名登录。 5. 示例 使用"docker tag"命令重命名镜像,并将它通过专有网络地址推送至Registry。 $ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE registry.aliyuncs.com/acs/agent 0.7-dfb6816 37bb9c63c8b2 7 days ago 37.89 MB $ docker tag 37bb9c63c8b2 registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816 使用 "docker push" 命令将该镜像推送至远程。 $ docker push registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816