Docker入门到实践
1.什么是Docke
1.网上有很多
2.为什么要使用Docker?

优点
更高效的利用系统资源
更快速的启动时间
一致的运行环境
持续交付和部署
更轻松的迁移
更轻松的维护和扩展
3.Docker的使用
3.1安装docker
以ubuntu16.04为例
官方文档:https://docs.docker.com/install/linux/docker-ce/ubuntu/
删除旧版本
$ sudo apt-get remove docker docker-engine docker.io
由于 apt 源使用 HTTPS 以确保软件下载过程中不被篡改。因此,我们首先 需要添加使用 HTTPS 传输的软件包以及 CA 证书。
$ sudo apt-get update
$ sudo apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
鉴于国内网络问题,强烈建议使用国内源,官方源请在注释中查看。 为了确认所下载软件包的合法性,需要添加软件源的 GPG 密钥。
$ curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository \
"deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \
$(lsb_release -cs) \
stable"
更新 apt 软件包缓存,并安装 docker-ce:
$ sudo apt-get update
$ sudo apt-get install -y docker-ce
# 开机启动
$ sudo systemctl enable docker
# 启动docker服务
$ sudo systemctl start docker
默认情况下,docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安 全考虑,一般 Linux 系统上不会直接使用 root 用户。因此,更好地做法是将需 要使用 docker 的用户加入 docker 用户组。
# 建立 docker 组:
$ sudo groupadd docker
# 将当前用户加入 docker 组:
$ sudo usermod -aG docker $USER
# 重新登录ssh
# 验证安装
docker run hello-world
3.2 配置文件:/etc/docker/daemon.json
官方文档: https://docs.docker.com/engine/reference/commandline/dockerd/#daemonconfiguration-file
# 编辑配置文件
$ sudo vi /etc/docker/daemon.json
{
"registry-mirrors": ["], # 镜像加速的地址
"insecure-registries": [""], # 非https私有仓库地址
"data-root": "/var/lib/docker" # docker安装目录
}
3.3 创建容器
docker pull nginx
docker run -d --name web -p 80:80 nginx
查看容器运行状态
docker ps
浏览器打开:http://127.0.0.1
echo "hello world" > hello.html
docker run -d --name web -p 80:80 -v `pwd`:/usr/share/nginx/html nginx
-d 后台运行
--name 指定容器名
-p 映射端口
-v 映射数据卷
3.4 镜像(Image)和容器(Container)的关系
镜像是静态的定义,容器是镜像运行时的实体。
容器可以被创建、启动、停止、删除、暂停等。
举例:
镜像 容器
类class Apple 对象 new Apple()
安装盘ISO 虚拟机
3.5创建自己的镜像
官方文档:https://docs.docker.com/develop/develop-images/dockerfile_bestpractices/
vi Dockerfile
FROM nginx RUN
echo "hello world" > /usr/share/nginx/html/hello.html
docker build -t my-web:1.0 . (注意这个点,必须有)
查看镜像
docker images
启动容器
docker run -d --name web -p 80:80 my-web:1.0
3.5.1 环境变量
vi start.sh
echo "hello world ${MY_NUM}" > /usr/share/nginx/html/hello.html
nginx -g "daemon off;"
vi Dockerfile
FROM nginx
ENV MY_NUM="100"
ADD start.sh /start.sh
CMD sh /start.sh
启动容器
docker build -t my-web:2.0 . (注意这个点,必须有)
# 无环境变量运行
docker run -d --name web -p 80:80 my-web:2.0
# 有环境变量运行
docker run -d --name web -p 80:80 -e MY_NUM=200 my-web:2.0
# 基础镜像
FROM nginx
# 预置环境变量
ENV MY_NUM="100“
# 制作镜像的操作,尽量减少RUN的个数,可以有效减少镜像大小
RUN echo "hello world" > /usr/share/nginx/html/hello1.html
# 添加制作镜像的文件
ADD start.sh /start.sh
# 容器启动命令
# 注意区分CMD和RUN的区别
#CMD ["nginx", "-g", "daemon off;"]
#CMD nginx -g "daemon off;“
CMD sh /start.sh
FROM nginx
RUN dd if=/dev/zero bs=1024 count=102400 of=/root/100MB.file
RUN rm -f /root/100MB.file
#RUN dd if=/dev/zero bs=1024 count=102400 of=/root/100MB.file && rm -f /root/100MB.file
docker build -t test:1.0 .
docker build -t test:2.0 .
2.docker-compose
官方文档: https://docs.docker.com/compose/install/ https://docs.docker.com/compose/compose-file/
官网安装
$ sudo curl -L https://github.com/docker/compose/releases/download/1.23.1/dockercompose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
公司内网安装
$ sudo curl -L http://ftp.fzyun.io/lib/docker-compose/1.23.1/docker-composeLinux-x86_64 -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
docker run -d --name web -p 80:80 -e MY_NUM=200 \ -v `pwd`/web:/usr/share/nginx/html/ my-web:2.0
vi docker-compose.yml
version: "3.5"
services:
web:
image: nginx
restart: always
ports: - "80:80"
volumes:
- ./web:/usr/share/nginx/html/
environment:
MY_NUM: 200
多服务样例:
version: "3.5"
services:
web:
image: nginx:1.15.12-alpine
restart: always
ports: - "80:80"
mysql:
image: mysql:5.7
restart: always
ports: - “3306:3306"
environment: MYSQL_ROOT_PASSWORD: ***(root用户密码)
Docker入门到实践的更多相关文章
- 《Docker 入门与实践》 已经出版了~欢迎有须要的朋友关注。
在云计算时代.开发人员将应用转移到云上已经攻克了硬件管理的问题,然而软件配置和管理相关的问题依旧存在. Docker的出现正好能帮助软件开发人员开阔思路.尝试新的软件管理方法来解决问题. 通过掌握Do ...
- Docker 入门到实践(四)Docker 使用镜像
一.获取镜像 Docker Hub 上有大量的高质量的镜像让我们获取,命令为: docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签] 具体的选项可以 ...
- Docker 入门到实践(三)Docker 安装
注意:不要在没有配置 Docker APT 源的情况下直接使用 apt 命令安装 Docker. 一.准备工作 系统要求 Docker CE 支持一下版本的 Ubuntu 操作系统 Cosmic 18 ...
- Docker入门与实践
一.Docker介绍 docker官网:https://www.docker.com/ Docker hub地址: https://hub.docker.com/ 1.基本概念 Docker ...
- Docker入门与实践之 Dockerfile 语法详解
一.Dockerfile 概述 Dockerfile是docker程序的解释脚本文件,Dockerfile 是一条一条的指令,Docker程序将dockerfile中的一条条指令编译成Linux可执行 ...
- Docker入门与实践之 docker安装与了解
一.Docker 概述 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源.Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后 ...
- Docker入门到实践——简单操作
1.对比传统虚拟机总结 特性 容器 虚拟机 启动 秒级 分钟级 硬盘使用 一般为MB 一般为GB 性能 接近原生 弱于 系统支持量 单机支持上千个容器 一般几十个 2.基本概念 Docker包括三个基 ...
- Docker 入门实践
欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:张戈 导语 本文从新手视角记录了一个实际的Dokcer应用场景从创建.上传直到部署的详细过程,并简单的介绍了腾讯云容器服务的使用方法 ...
- Docker 从入门到实践(一)Docker 简介
读前须知:本教程大部分都是[Docker 从入门到实践 ]一书的知识,有兴趣可以直接观看书籍.同时,借鉴书籍的知识,如有侵权,请告知我,我会删除处理.谢谢. 一.什么是 Docker? Docker ...
随机推荐
- elasticsearch 介绍
一.什么是elasticsearch Elasticsearch是一个基于Lucene的高度可伸缩的分布式的开源全文搜索和分析引擎.它允许您快速.实时地存储.搜索和分析大量数据.它通常用作底层引擎/技 ...
- java 代码
java 里的 pandas tablesaw DataFrame 再有就是 spark 了 java 代码规范 Java8特性详解 lambda表达式 Stream Sonar 规则检测 sprin ...
- count
select deptno as 部门,count(*) as 人数from emp group by deptno; --统计各个部门的人数
- linux下进入root用户登录
1.打开终端,输入sudo passwd -u root 输入当前用户的登录密码,提示如下标红区域信息 解决方案: 1)直接输入命令:su,输入当前用户登录密码 2)添加sudoers文件的写权限,命 ...
- 浅入深出Vue系列
浅入深出Vue导航 导航帖,直接点击标题即可. 文中所有涉及到的资源链接均在最下方列举出来了. 前言 基础篇 浅入深出Vue:工具准备之WebStorm搭建及配置 浅入深出Vue之工具准备(二):Po ...
- ubuntu16.04 安装vscode
1.通过官方PPA安装Ubuntu make sudo add-apt-repository ppa:ubuntu-desktop/ubuntu-make sudo apt-get update su ...
- vue 前端框架 (二) 表格增加搜索
本章知识点 归纳: 1.定义全局过滤器 以及 私有过滤器 2.定义全局指令 以及 定义私有指令 3.定义键盘修饰符 4.v-for 的函数引入 5.字符串的incluede 方法,.toString( ...
- LeetCode第二十二题-创建n对括号
Generate Parentheses 问题简介: 给定n对括号,编写一个函数来生成格式正确的括号的所有组合. 举例: 给定n = 2,解集是: [ “()()”, “(())” ] 给定n = 3 ...
- [Kubernetes]深入理解StatefulSet
前面我写的一系列博客,如果你能够耐心看到这一篇,那你应该对一个概念就不是太陌生了:Deployment. 为什么提这个概念呢,这就要说到Deployment的一个不足了.Deployment不足以覆盖 ...
- ZOJ 4110 Strings in the Pocket (马拉车+回文串)
链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4110 题目: BaoBao has just found two s ...