【转】Docker基础
一、简介
Docker是一个开源的应用容器引擎,使用Go语言开发,基于Linux内核的CGroup、Namespace、Union FS等技术实现的一种系统级虚拟化技术。
特性
- 更高效的利用系统资源:由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。
- 更快速的启动时间:传统的虚拟机技术启动应用服务往往需要数分钟,而Docker 容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。
- 一致的运行环境:开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些bug 并未在开发过程中被发现。而Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现「这段代码在我机器上没问题啊」这类问题。
- 持续交付和部署:Docker是build once,run everywhere. 使用Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过Dockerfile 来进行镜像构建,并结合持续集成(CI) 系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合持续部署(CD) 系统进行自动部署。
- 更轻松的迁移:Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。此外,Docker 团队同各个开源项目团队一起维护了一大批高质量的官方镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。使用Dockerfile 使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。
组件
版本
二、安装部署
安装说明
安装需求:
- Linux kernel(内核) 3.10+
- Linux kernel cgroups and namespaces
由于Docker是建立在linux中两种核心技术之上:namespace与Cgroup,而User namespace出现的版本是3.8,所以安装docker需要内核版本大于3.10,centos6内核版本是2.6所以无法在其上使用docker。
namespace | 系统调用参数 | 隔离内容 | 内核版本 |
UTS | CLONE_NEWUTS | 主机名和域名 | 2.6.19 |
IPC | CLONE_NEWIPC | 信号量、消息队列和共享内存 | 2.6.19 |
PID | CLONE_NEWPID | 进程编号 | 2.6.24 |
Network | CLONE_NEWNET | 网络设备、网络栈、端口等 | 2.6.29 |
Mount | CLONE_NEWNS | 挂载点(文件系统) | 2.4.19 |
User | CLONE_NEWUSER | 用户和用户组 | 3.8 |
centos7安装
1. 安装依赖
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
2.添加仓库
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
3. 查看docker版本列表
yum list docker-ce --showduplicates | sort -r
4. 安装指定版本的docker(可忽略,直接安装最新版)
yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
5.安装最新版docker
yum install docker-ce docker-ce-cli containerd.io
Debian&Ubuntu
1. 更新包管理
sudo apt-get update
2. 添加https包信任
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common
3. 添加docker官方GPG 证书
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
4. 写入软件信息
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/debian \
$(lsb_release -cs) \
stable”
4. 更新并安装docker
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
5.若安装指定版本采用如下方式
#列出版本
$ apt-cache madison docker-ce docker-ce | 5:18.09.1~3-0~debian-stretch | https://download.docker.com/linux/debian stretch/stable amd64 Packages
docker-ce | 5:18.09.0~3-0~debian-stretch | https://download.docker.com/linux/debian stretch/stable amd64 Packages
docker-ce | 18.06.1~ce~3-0~debian | https://download.docker.com/linux/debian stretch/stable amd64 Packages
docker-ce | 18.06.0~ce~3-0~debian | https://download.docker.com/linux/debian stretch/stable amd64 Packages
#安装
sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io
运行docker
停止防火墙、关闭selinux
systemctl stop firewalld && systemctl disable firewalld && setenforce 0
配置镜像加速
mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://registry.docker-cn.com"]
} EOF
运行docker
#重新装载systemd服务
systemctl daemon-reload
#启动docker
systemctl start docker
#开机自动docker
#systemctl enable docker
#查看docker版本
[root@app51 ~]# docker version
Client:
Version: 18.09.2
API version: 1.39
Go version: go1.10.6
Git commit: 6247962
Built: Sun Feb 10 04:13:27 2019
OS/Arch: linux/amd64
Experimental: false Server: Docker Engine - Community
Engine:
Version: 18.09.2
API version: 1.39 (minimum version 1.12)
Go version: go1.10.6
Git commit: 6247962
Built: Sun Feb 10 03:47:25 2019
OS/Arch: linux/amd64
三、docker基本操作
容器操作
其中docker container 则是管理容器命令,老的版本中是使用docker进行容器管理,新版本兼容老版本docker命令,所以对容器管理既可用docker也可以用docker container。
1.启动容器
- -i:--interactive,交互式启动
- -t:--tty,分配终端
- -v:--volume,挂在数据卷
- -d:--detach,后台运行
- --name:容器名字
- --network:指定网络
- --rm:容器停止自动删除容器
- -P:自动暴露所有容器内端口,宿主随机分配端口
- -p:指定端口映射,将容器内服务的端口映射到宿主机的指定端口,可以使用多个-p
[root@app51 ~]# docker run -it --name nginx-container -p 8080:80 nginx /bin/bash
root@fd92290433da:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
2.查看容器
docker ps [OPTIONS]
- -a:--all ,查看所有容器,包括退出和其他状态的
- -n::--last int,显示最后n个创建的容器
- -l, :--latest ,显示最近的容器
root@app51 ~]# docker ps -n 2
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4d51a1cdf4b4 busybox "/bin/sh" 11 seconds ago Up 9 seconds busybox
383f31ff8f01 nginx "nginx -g 'daemon of…" 3 minutes ago Up 3 minutes 0.0.0.0:8080->80/tcp nginx-container
[root@app51 ~]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4d51a1cdf4b4 busybox "/bin/sh" 41 seconds ago Up 39 seconds busybox
[root@app51 ~]#
3.查看容器具体信息
docker inspect [OPTIONS] NAME|ID [NAME|ID…]
示例:
[root@app51 ~]# docker inspect busybox
[
{
"Id": "4d51a1cdf4b4e06831faa6e54a32f1f8eb544e349028083b12f5b3f87af075c9",
"Created": "2019-02-23T09:10:20.907074902Z",
"Path": "/bin/sh",
"Args": [],
4.停止容器
[root@app51 ~]# docker stop nginx-container
nginx-container
5.启动已停止的容器
docker start [OPTIONS] CONTAINER [CONTAINER…]
- -a:--attach 附加终端
- -I:--interactive 交互式
[root@app51 ~]# docker start -ia busybox
/ # ls
bin dev etc home proc root sys tmp usr var
/ # ps
PID USER TIME COMMAND
1 root 0:00 /bin/sh
7 root 0:00 ps
6.删除容器
- -f: --force 强制删除
docker rm nginx-container
Ps:删除所有容器
docker rm -f `docker ps -a -q`
docker ps -a |awk -F ' ' '{print $1}' |xargs docker rm -f
7. 暂停某个容器
docker pause CONTAINER [CONTAINER…]
示例:
[root@app51 ~]# docker pause nginx-container
nginx-container
8.恢复暂停的容器
docker unpause CONTAINER [CONTAINER…]
[root@app51 ~]# docker pause nginx-container
nginx-container
9.查看容器日志
docker logs [OPTIONS] CONTAINER
常用选项:
- -t, --timestamps :显示日志时间
root@app51 ~]# docker logs nginx-container
10.1.201.30 - - [23/Feb/2019:10:55:33 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36" "-"
10.在已运行的容器中运行命令
- -d:--detach ,后台运行命令
- -e, --env list 设置env
- -i, --interactive 启用交互式
- -t, --tty 启用终端
- -u, --user string 指定用户 (格式: <name|uid>[:<group|gid>])
- -w, --workdir string 指定工作目录
示例:
[root@app51 ~]# docker exec -it -u nginx nginx-container /bin/sh
$ id
uid=101(nginx) gid=101(nginx) groups=101(nginx)
$
11.容器导出
- -o, --output 导出的文件名称
[root@app51 ~]# docker export nginx-container -o nginx.tar
[root@app51 ~]# ls -lh ningx.tar
-rw------- 1 root root 107M 2月 23 19:18 ningx.tar
[root@app51 ~]# docker import nginx.tar nginx:v154
sha256:fd4931710d35765edb9bbd0ea84a886e0901aa7a2de03ab2eefd9aedea0e8646
[root@app51 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx v154 fd4931710d35 10 seconds ago 108MB
<none> <none> 940cdf68f69d 7 minutes ago 108MB
busybox latest d8233ab899d4 8 days ago 1.2MB
nginx latest f09fe80eb0e7 2 weeks ago 109MB
其他导入示例
docker import http://example.com/image.tar.gz repository:tag
12.将容器提交为镜像
- -a,--author 指定作者
- -m, --message 本次提交的信息
- -p, --pause 提交为镜像时候暂停容器
- -c, --change list 修改镜像某些属性,列如启动命令
[root@app51 ~]# docker commit -p -m 'build nginx image' nginx-container nginx:test
sha256:6c68885804ca69970d747cc6cc8050ed7a1b6c24838695ec11b18348318809a6
[root@app51 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx test 6c68885804ca 6 seconds ago 109MB
nginx v154 fd4931710d35 2 hours ago 108MB
镜像操作
在老版本中镜像操作也是使用的docker命令,新版本进行了分组,可使用docker image 来进行镜像操作。
1.搜索镜像
docker search [OPTIONS] TERM
- --limit 限制搜索的结果条目数量,默认显示25条
[root@app51 ~]# docker search centos
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 5179 [OK]
ansible/centos7-ansible Ansible on Centos7 120 [OK]
jdeathe/centos-ssh CentOS-6 6.10 x86_64 / CentOS-7 7.5.1804 x86… 106 [OK]
consol/centos-xfce-vnc Centos container with "headless" VNC session… 80 [OK]
2.下载镜像
TAG不写默认为最新版本latest
[root@app51 ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
a02a4930cb5d: Pull complete
Digest: sha256:184e5f35598e333bfa7de10d8fb1cebb5ee4df5bc0f970bf2b1e7c7345136426
Status: Downloaded newer image for centos:latest
3.查看镜像
- -a: 查看所有已下载的镜像
- -f: --filter,过滤某些镜像
[root@app51 ~]# docker image ls -a
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 1e1148e4cc2c 2 months ago 202MB
4.删除镜像
docker image rm [OPTIONS] IMAGE [IMAGE...] 或者docker rmi IMAGE
[root@app51 ~]# docker image rm centos
Untagged: centos:latest
Untagged: centos@sha256:184e5f35598e333bfa7de10d8fb1cebb5ee4df5bc0f970bf2b1e7c7345136426
Deleted: sha256:1e1148e4cc2c148c6890a18e3b2d2dde41a6745ceb4e5fe94a923d811bf82ddb
Deleted: sha256:071d8bd765171080d01682844524be57ac9883e53079b6ac66707e192ea25956
5. 镜像导出
docker save [OPTIONS] IMAGE [IMAGE...]
- -o,--output 输出到文件
[root@app51 ~]# docker save -o nginx-bus.tar.gz busybox:latest nginx:latest
6.镜像导入
常用选项:
- -i, --input 指定文件来源
[root@app51 ~]# docker load -i nginx-bus.tar.gz
Loaded image: nginx:latest
Loaded image: busybox:latest
7.查看镜像信息
docker image inspect [OPTIONS] IMAGE [IMAGE...]
[root@app51 ~]# docker image inspect nginx
[
{
"Id": "sha256:f09fe80eb0e75e97b04b9dfb065ac3fda37a8fac0161f42fca1e6fe4d0977c80",
"RepoTags": [
"nginx:latest"
],
"RepoDigests": [
"nginx@sha256:dd2d0ac3fff2f007d99e033b64854be0941e19a2ad51f174d9240dda20d9f534"
],
其他
运行信息查看docker info
[root@app51 ~]# docker info
Containers: 1
Running: 1
Paused: 0
Stopped: 0
Images: 4
Server Version: 18.09.2
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
版本信息查看 docker version
root@app51 ~]# docker version
Client:
Version: 18.09.2
API version: 1.39
Go version: go1.10.6
Git commit: 6247962
Built: Sun Feb 10 04:13:27 2019
OS/Arch: linux/amd64
Experimental: false
【转】Docker基础的更多相关文章
- Docker - Docker基础命令及使用
Docker Docker - 官网 Docker - Hub GitHub - Docker Docker中文社区 Docker基础命令 Docker 查看帮助信息:docker --help 查看 ...
- 【云计算】Docker云平台—Docker基础
Docker云平台系列共三讲,此为第一讲:Docker基础 参考资料: Docker官方文档:https://docs.docker.com/ Docker从入门到实践:https://yeasy.g ...
- Docker基础技术:Linux Namespace(下)
在 Docker基础技术:Linux Namespace(上篇)中我们了解了,UTD.IPC.PID.Mount 四个namespace,我们模仿Docker做了一个相当相当山寨的镜像.在这一篇中,主 ...
- Docker 基础技术:Linux Namespace(下)
导读 在Docker基础技术:Linux Namespace(上篇)中我们了解了,UTD.IPC.PID.Mount 四个namespace,我们模仿Docker做了一个相当相当山寨的镜像.在这一篇中 ...
- Docker基础入门及示例
Docker近几年的发展可谓一日千里,特别从是2013年随着一个基于LXC的高级容器引擎开源,到现在,其在linux和windows上都有了很好的支持,并且已经有很多公司将docker用于实际的生产环 ...
- Docker 基础 : 镜像
目录 获取镜像 查看镜像信息 搜索镜像 删除镜像 创建镜像 导出和导入镜像 上传镜像 总结 镜像是 Docker 的三大核心概念之一.Docker 运行容器前需要本地存在对应的镜像,如果本地没有对应的 ...
- Docker 基础技术之 Linux cgroups 详解
PS:欢迎大家关注我的公众号:aCloudDeveloper,专注技术分享,努力打造干货分享平台,二维码在文末可以扫,谢谢大家. 推荐大家到公众号阅读,那里阅读体验更好,也沉淀了很多篇干货. 前面两篇 ...
- docker 基础知识分享ppt
给团队做的docker基础分享ppt, 见下面的附件. https://files.cnblogs.com/files/harrychinese/docker_intro.pptx
- 中标麒麟龙芯平台--docker基础镜像制作
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源.Docker 的出现为开发人员和运维人员带来了极大的便利.Docker在X86下常见的发行版Linux如Ub ...
- Docker系列03—Docker 基础入门
本文收录在容器技术学习系列文章总目录 1.概念介绍 1.1 容器 1.1.1 介绍 容纳其它物品的工具,可以部分或完全封闭,被用于容纳.储存.运输物品.物体可以被放置在容器中,而容器则可以保护内容物. ...
随机推荐
- Unity3d Time
using UnityEngine; using System.Collections; public class test1 : MonoBehaviour { public float angle ...
- Java基础6一面向对象
面向对象的编程思想:是以事物的整体的为基本单位,从事物的属性和行为两个方面进行描述. 特点: Java来源于生活服务于生活 用面向对象的思想能够接近正常的思维方式. 面向对象语言中有设计模式一说. 在 ...
- (转)vue router 如何使用params query传参,以及有什么区别
写在前面: 传参是前端经常需要用的一个操作,很多场景都会需要用到上个页面的参数,本文将会详细介绍vue router 是如何进行传参的,以及一些小细节问题.有需要的朋友可以做一下参考,喜欢的可以点波赞 ...
- RecyclerView实现终极画廊效果 中间突出并且压住两侧布局
先给大家上个gif 要不然下面很枯燥 忘记原来在哪里看到了..... 这个效果我找了NNNNNN长时间,,,我认为凭我现在的能力 写出来需要好久 所以 退而求其次找大神写好的... 你们不要小看了这个 ...
- 关于dlg和pro的问题
微软链接:http://technet.microsoft.com/zh-cn/subscriptions/bb983387.aspx CDialogEx::CDialogEx 构造 CDialogE ...
- TortoiseSvn问题研究(一)
问题描述 今天在工作中遇到一个SVN方面的问题,牵扯出使用SVN这一段时间的一系列问题. 具体来说,是这样的: 上周五有上线分支,自己的分支需要merge: 很多项目小组都在开发这个项目,再往前好像也 ...
- 编写jQuery 插件
编写jQuery Plugin,要设置默认值,并允许用户修改默认值,或者运行是传入其他值. 最终,我们得出编写一个jQuery插件的原则: 给$.fn绑定函数,实现插件的代码逻辑: 插件函数最后要 r ...
- 开发一款合格的APP成本费用大概是多少?
随着移动互联网的发展,APP开发已经成了当下最热门的话题.无数人都盼望做出下一个微信.滴滴打车等等神奇的APP软件.如今,APP开发门槛已经非常低,媒体上也充斥着各种小团队创造奇迹的故事.不过,APP ...
- Vue中的v-model与my97日期选择插件冲突
Vue中的v-model指令只是一个语法糖,其具体实现是:监听input框的input事件,然后将用户输入的值赋值给input框的value属性 <input type="text&q ...
- Javaee 方法的格式和注意事项
1.构造方法的格式是什么?有哪些注意事项? 修饰符+方法名称+(参数列表),构造的方法没有返回值,方法名称要和类名一样,有属性参数的需要在成员变量前加this,参数列表的值要和指定的方法格式相同. ...