《ker技术与实践》由会员分享,可在线阅读,更多相关《ker技术与实践(23页珍藏版)》请在金锄头文库上搜索。
1、Docker 技术与实践 王飞 Docker 简介1 Docker 安装2 Docker 使用3 Docker DockerFile4 Docker 简介 开源容器引擎,诞生于2013年初,基于Go语言实现 容器技术的轻量级虚拟化解决方案 对容器cgroup、namespace等底层技术进行了封装抽象 创建和管理简单便捷(包括命令行和API) 主流IT厂商(微软,红帽Linux,IBM,Oracle等)的支持 Docker 简介 类类目虚拟拟机容器 占用磁盘盘空间间大,G级别级别小,M级别级别 启动动速度慢,分钟级钟级快,秒级级启动动 运行形态态 运行于Hypervisior 上 运行在宿主机
2、内核 共享同一个Linux内核 虚拟拟化方式硬件层层面实现实现 操作系统层统层 面 直接复用宿主机操作系统统 并发发性单单机十几个成百上千 性能逊逊于宿主机接近宿主机本地进进程 资资源复用率低高 隔离性单单机无法有效隔离进进程级别级别 隔离 Docker 简介 Docker 简介 Repository ImageContainer Pull Push Run Commit 容器共享base image存储 上层image依赖下层的父image Image只读 所有写操作发生在writeable层 启动容器逐层加载 Docker 简介 Docker 微服务 DevOps 人、组织 敏 捷 Doc
3、ker 安装 支持系统 CentOS 7.3 64-bit 升级Docker:yum -y update 设置Docker CE资源库: sudo yum install -y yum-utils sudo yum-config-manager -add-repo ce.repo 安装Docker并启动: sudo yum makecache fast sudo yum -y install docker-ce sudo systemctl start docker Docker 安装 设置mirror : 创建文件 /etc/docker/daemon.json 并写入如下内容 “regis
4、try-mirrors“: “ “ 开放管理端口映射: 文件/lib/systemd/system/docker.service中的 ExecStart=/usr/bin/dockerd 修改为 ExecStart=/usr/bin/dockerd -H tcp:/0.0.0.0:2375 H unix:/var/run/docker.sock Docker 安装 测试是否安装成功 systemctl daemon-reload & service docker restart sudo docker run hello-world 管理地址写入 /etc/profile echo expor
5、t DOCKER_HOST=tcp:/0.0.0.0:2375 /etc/profile & source /etc/profile 成功 Docker 使用 启动 DockerFly docker run -name dockerfly -restart=always -d - v /var/run/docker.sock:/var/run/docker.sock - p 2735:2735 -p 28083:28083 - Docker 使用 启动 DockerFly docker run -name dockerfly -restart=always -d - v /var/run/do
6、cker.sock:/var/run/docker.sock - p 2735:2735 -p 28083:28083 - 容器名 自动启动 启动进 入后台 挂载目录 镜像名 版本号 启动 外内 外内 Docker 使用 l -name 容器命名 l -v 挂载主机目录到容器目录(冒号分隔) l -d 容器启动后进入后台(守护态) l -p 将 container 内的端口映射成 host 的端口 l -P 随机分配端口号 l -t 分配伪终端(pseudo-tty)绑定到容器的标准输入上 l -i 让标准输入保持打开 l -rm 运行结束删除容器,配合 it 使用 l -restart=al
7、ways 启动docker时自动启动容器 l -e TZ=“Asia/Shanghai” -v /etc/localtime:/etc/localtime:ro 设置时区上海 Docker 使用 l 检查本地是否存在指定的镜像,不存在就从公有仓库下载 l 利用镜像创建并启动一个容器 l 分配一个文件系统,在只读的镜像层外挂载一层可读写层 l 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中 l 从地址池配置一个IP地址给容器 l 执行用户指定的应用程序 l 执行完毕后容器被停止 执行 Run 命令时做了什么? Docker 使用 常用命令作用 docker ps查看正在运行的容器 docke
8、r ps -a查看所有容器(包括已停止的) docker start 容器名/容器ID启动已停止的镜像 docker restart 容器名/容器 ID 重启运行中的镜像 docker stop 容器名/容器ID停止运行中的镜像 docker images查看所有镜像 docker rm 容器名/容器ID删除容器,加 f 表示强制删除 docker rmi 镜像名/镜像ID删除镜像,加 f 表示强制删除 docker search查找官方仓库中的镜像 docker pull下载镜像 docker build创建镜像docker build -t myrepo/myapp /tmp/test1/
9、 docker tag imageName:tag更改镜像名和版本号 Docker 使用 不常用命令作用 docker export导出镜像 docker export imageId ubuntu.tar docker import导入镜像 docker import ubuntu.tar ubuntu:1.8 丢弃所有的历史记录和元数据信息 docker load同 docker import 但保存所有的历史记录和元数据信息 docker login登录 docker logout登出 docker pause 容器名/容器ID暂停 docker unpause容器名/容器ID从暂停继续
10、 docker commit 容器名/容器ID将容器生成新的镜像 docker kill容器名/容器ID强行停止容器 docker rename容器名/容器ID重命名容器 docker push 镜像名/镜像ID把镜像推到远程仓库便于使用 Docker 使用 Docker 使用 不要在容器中存储储数据 不要将你的应应用发发布两 份 不要创创建超大镜镜像 不要使用单层镜单层镜 像 不要为为运行中的容器创创 建镜镜像 不要只使用“最新”标签标签 不要在单单一容器中运行 超过过一个进进程 不要在镜镜像中存储储凭据 ,应应使用环环境变变量 使用非root用户户运行进进 程 不要依赖赖IP地址 Dock
11、er 使用 docker run -d -p 8086:8080 -e TZ=“Asia/Shanghai“ -v /var/local/garage/app/tomcat/webapps:/usr/local/tomcat/webapps -v /var/local/garage/app/tomcat/logs:/usr/local/tomcat/logs -v /etc/localtime:/etc/localtime:ro -name tomcat-garage-app tomcat:8-jre8 docker run -name dockerfly -restart=always -d
12、 -v /var/run/docker.sock:/var/run/docker.sock -p 2735:2735 -p 28083:28083 - docker run -name fei-mysql -restart=always -p 0.0.0.0:3306:3306 -v /var/lib/fei-mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.1 Docker 使用 docker run -it -rm -name my-maven-project -v /root/.m2:/root/.m2 -v
13、“$PWD“:/usr/src/mymaven -w /usr/src/mymaven maven:3.5.0-jdk-8-alpine mvn clean install sudo docker run -detach -hostname -publish 443:443 -publish 80:80 -publish 222:22 -name gitlab -restart always -volume /srv/gitlab/config:/etc/gitlab -volume /srv/gitlab/logs:/var/log/gitlab -volume /srv/gitlab/da
14、ta:/var/opt/gitlab gitlab/gitlab-ce:latest docker run -ti -rm -v $HOME:/root -v $(pwd):/git alpine/git clone Docker DockerFile 指令格式作用 FROM FROM : FROM 第一条指令必须为 FROM 指令。如果在同一个Dockerfile中创建多个镜 像时,可以使用多个 FROM指令(每个镜像一次) MAINTAINERMAINTAINER 指定维护 者信息 RUNRUN 将在shell终端中运行命令,即 /bin/sh -c RUN “executable“, “
15、param1“, “param2“使用exec执行,用于其它终端 如:RUN “/bin/bash“, “-c“, “echo hello“ CMD 每个DockerFile只 能有一个CMD命令 CMD “executable“,“param1“,“param2“使用exec执行,推荐方式 CMD command param1 param2在 /bin/sh 中执行,提供给需要交互的应用 CMD “param1“,“param2“提供给 ENTRYPOINT 的默认参数 EXPOSEEXPOSE .Docker服务端暴露的端口号 ENVENV 指定一个环境变量,容器运行时保持 ADDADD
16、复制到容器中的, 可以是Dockerfile所在目录的相对 路径,也可以是URL,还可以是tar文件 COPYCOPY 复制本地主机的到容器中的 ENTRYPOINT 只能有一个 ENTRYPOINT命令 ENTRYPOINT “executable“, “param1“, “param2“ 配置容器启动后执行的命令,不可被docker run 参数覆盖 ENTRYPOINT command param1 param2 (shell中执行) VOLUMEVOLUME “/data“创建一个可以从本地主机或其他容器挂载的挂载点 USERUSER daemon指定运行容器时的用户名和UID,后续的RUN也使用指定用户 WORKDIRWORKDIR /path/to/workdir为后续的RUN,