Docker 基础入门

1、概念介绍

1.1 容器

1.1.1 介绍

  容纳其它物品的工具,可以部分或完全封闭,被用于容纳、储存、运输物品。物体可以被放置在容器中,而容器则可以保护内容物。

1.1.2 要使用容器必须需要在内核级支持2中技术

  • namespaces 名称空间
  • Control Group(cgroups) 控制组

(1)为什么centos6 版本不能使用容器?

因为centos6 内核版本是2.6;容器需要一个user的名称空间,直到内核3.8版本才有:

 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

(2)Control Group(cgroups)

  • blkio:块设备IO
  • cpu:CPU
  • cpuacct:CPU资源使用报告
  • cpuset:多处理平台上的CPU集合
  • devices:设备访问
  • memory:内存用量及报告
  • perf_event:对cgroup中的任务进行统一性能测试
  • net_cls:cgroup中的任务创建的数据报文的类别标识符

1.2 docker

1.2.1 介绍

  • Docker是一个开放源代码软件项目,让应用程序布署在软件货柜下的工作可以自动化进行,借此在Linux操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化自动管理机制
  • Docker利用Linux核心中的资源分离机制,例如cgroups,以及Linux核心名字空间(namespaces,来创建独立的容器(containers。这可以在单一Linux实体下运作,避免启动一个虚拟机造成的额外负担。Linux核心对名字空间的支持完全隔离了工作环境中应用程序的视野,包括进程树、网络、用户ID与挂载文件系统,而核心的cgroup提供资源隔离,包括CPU、存储器、block I/O与网络。从0.9版本起,Dockers在使用抽象虚拟是经由libvirt的LXC与systemd - nspawn提供界面的基础上,开始包括libcontainer库做为以自己的方式开始直接使用由Linux核心提供的虚拟化的设施,
  • 依据行业分析公司“451研究”:“Dockers是有能力打包应用程序及其虚拟容器,可以在任何Linux服务器上运行的依赖性工具,这有助于实现灵活性和便携性,应用程序在任何地方都可以运行,无论是公有云、私有云、单机等。”

1.2.2 docker 运行架构

2、安装启动docker

2.1 安装环境

(1)依赖的基础环境

  • 64 位CPU
  • Linux kernel(内核) 3.10+
  • Linux kernel cgroups and namespaces

(2)查询自己服务器的环境

① 使用的服务器版本

[[email protected] ~]# cat /etc/redhat-release

CentOS Linux release 7.3.1611 (Core)

② 内核版本

[[email protected] ~]# uname -r

3.10.0-514.el7.x86_64

③ ip地址

[[email protected] ~]# hostname -I

192.168.130.101 192.168.10.101

2.2 安装docker

2.2.1 使用官方安装脚本自动安装

实际上就是下载一个安装脚本,再执行安装(不推荐,因为不能选择版本安装)

[[email protected] ~]# curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

2.2.2 CentOS 7 (使用yum进行安装,推荐)

(1)添加docker-ce 源信息

[[email protected] ~]# wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo

(2)修改docker-ce 源

[[email protected] ~]# sed -i ‘[email protected]@mirrors.tuna.tsinghua.edu.cn/[email protected]‘ /etc/yum.repos.d/docker-ce.repo

(3)更新并安装 Docker-CE

[[email protected] ~]# yum makecache fast

[[email protected] ~]# yum -y install docker-ce   安装的是默认最新版本

(4)安装指定版本的docker

① 查看都有哪些版本

[[email protected] ~]# yum list docker-ce.x86_64 --showduplicates | sort -r

② 下载指定版本,我这里下载的稳定版本

[[email protected] ~]# yum -y install docker-ce-17.03.2.ce

③ 安装报错(虚拟机中可能会遇到,如果没有报错请忽略)

Error: Package: docker-ce-18.03.1.ce-1.el7.centos.x86_64 (docker-ce-stable)

Requires: container-selinux >= 2.9

报错原因: docker-ce-selinux 版本过低

解决办法:https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/x86_64/stable/Packages/网站下载对应版本的docker-ce-selinux,安装即可

[[email protected] ~]# yum -y install https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.3.ce-1.el7.noarch.rpm

④ 再次安装docker 成功

[[email protected] ~]# yum -y install docker-ce-17.03.2.ce

2.3 Ubuntu 14.04 16.04 (使用apt-get进行安装)

(1)安装最新版本

# step 1: 安装必要的一些系统工具

sudo apt-get update

sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common

# step 2: 安装GPG证书

curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

# Step 3: 写入软件源信息

sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

# Step 4: 更新并安装 Docker-CE

sudo apt-get -y update

sudo apt-get -y install docker-ce

(2)安装指定版本的Docker-CE:

# Step 1: 查找Docker-CE的版本:

# apt-cache madison docker-ce

#   docker-ce | 17.03.1~ce-0~ubuntu-xenial | http://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages

#   docker-ce | 17.03.0~ce-0~ubuntu-xenial | http://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages

# Step 2: 安装指定版本的Docker-CE: (VERSION 例如上面的 17.03.1~ce-0~ubuntu-xenial)

# sudo apt-get -y install docker-ce=[VERSION]

2.3 启动docker

2.3.1 配置docker镜像加速

多种加速方式:

  • docker cn
  • 阿里云加速器
  • 中国科技大学
  • ... ...

(1)docker cn 加速

[[email protected] ~]# mkdir -p /etc/docker

[[email protected] ~]# sudo tee /etc/docker/daemon.json <<-‘EOF‘

{

"registry-mirrors": ["https://registry.docker-cn.com"]

}

EOF

(2)阿里云加速器

① 注册阿里云账号,专用加速器地址获得路径:

https://cr.console.aliyun.com/#/accelerator

② 添加加速器到配置文件

[[email protected] ~]# sudo tee /etc/docker/daemon.json <<-‘EOF‘

{

"registry-mirrors": ["https://xxxxxxx.mirror.aliyuncs.com"]

}

EOF

③ 阿里云页面有操作步骤

2.3.2 启动docker服务

① 重载docker启动配置

[[email protected] ~]# systemctl daemon-reload

② 将docker设为开机自启

[[email protected] ~]# systemctl start docker.service

③ 启动docker服务

[[email protected] ~]# systemctl enable docker.service

④ 查看docker版本

[[email protected] ~]# docker version

Client:
 Version:      17.03.2-ce
 API version:  1.27
 Go version:   go1.7.5
 Git commit:   f5ec1e2
 Built:        Tue Jun 27 02:21:36 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.03.2-ce
 API version:  1.27 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   f5ec1e2
 Built:        Tue Jun 27 02:21:36 2017
 OS/Arch:      linux/amd64
 Experimental: false

3、docker 基础命令操作

3.1 镜像操作

3.1.1 搜索官方仓库镜像

[[email protected] ~]# docker search nginx
NAME                                                   DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                                                  Official build of Nginx.                        10659     [OK]
jwilder/nginx-proxy                                    Automated Nginx reverse proxy for docker c...   1497                 [OK]
richarvey/nginx-php-fpm                                Container running Nginx + PHP-FPM capable ...   671                  [OK]

搜索结果解释:


参数


说明


NAME


镜像名称


DESCRIPTION


镜像说明


STARS


点赞数量


OFFICIAL


是否是官方的


AUTOMATED


是否是自动构建的

3.1.2 拉取镜像

(1)根据镜像名称(tag指定版本)拉取镜像

[[email protected] ~]# docker pull nginx:1.14-alpine
1.14-alpine: Pulling from library/nginx
cd784148e348: Pull complete
12b08f7ef616: Pull complete
65071a4e699c: Pull complete
9936647427be: Pull complete
Digest: sha256:e3f77f7f4a6bb5e7820e013fa60b96602b34f5704e796cfd94b561ae73adcf96
Status: Downloaded newer image for nginx:1.14-alpine
[[email protected] ~]# docker pull busybox
Using default tag: latest
latest: Pulling from library/busybox
b4a6e23922dd: Pull complete
Digest: sha256:8ccbac733d19c0dd4d70b4f0c1e12245b5fa3ad24758a11035ee505c629c0796
Status: Downloaded newer image for busybox:latest

注:alpine 版本:构建容器小镜像的发型版本

(2)查看当前主机镜像列表

[[email protected] ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              758ec7f3a1ee        7 days ago          1.15 MB
nginx               1.14-alpine         c5b6f731fbc0        13 days ago         17.7 MB

3.1.3 导出镜像

[[email protected] ~]# docker image save busybox > docker-busybox.tar.gz
[[email protected] ~]# ls docker-busybox.tar.gz
docker-busybox.tar.gz

3.1.4 删除镜像

[[email protected] ~]# docker image rm busybox
Untagged: busybox:latest
Untagged: [email protected]:8ccbac733d19c0dd4d70b4f0c1e12245b5fa3ad24758a11035ee505c629c0796
Deleted: sha256:758ec7f3a1ee85f8f08399b55641bfb13e8c1109287ddc5e22b68c3d653152ee
Deleted: sha256:23bc2b70b2014dec0ac22f27bb93e9babd08cdd6f1115d0c955b9ff22b382f5a
[[email protected] ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               1.14-alpine         c5b6f731fbc0        13 days ago         17.7 MB

3.1.5 导入镜像

[[email protected] ~]# docker image load -i docker-busybox.tar.gz
23bc2b70b201: Loading layer  1.37 MB/1.37 MB
Loaded image: busybox:latest
[[email protected] ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              758ec7f3a1ee        7 days ago          1.15 MB
nginx               1.14-alpine         c5b6f731fbc0        13 days ago         17.7 MB

3.1.6 查看镜像的详细信息

[[email protected] ~]# docker image inspect centos

3.2 容器操作

3.2.1 启动容器

方法1(不推荐):

  先创建一个容器:docker create 镜像名

  再启动容器:docker start 容器名

方法2:docker run 镜像名

(1)格式

Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

(2)options 常用命令选项

  • -t :打开一个终端,像使用交换机一样使用容器
  • -i:交互式访问
  • --name:容器名字
  • --network:指定网络
  • --rm:容器一停,自动删除
  • -d:剥离与当前终端的关系;否则会一直占据着终端
  • -p:端口映射,将容器内服务的端口映射在宿主机的指定端口

(3)示例:运行一个容器

[[email protected] ~]# docker run --name web1 -d -p 8888:80 nginx:1.14-alpine
ced78e522fd747635e9af01bc20882094e3b55ce50b9ae248962e8e8eeb89774
[[email protected] ~]# docker run --name b1 -it busybox /bin/sh  在运行容器时,交互式进入容器
/ # ls /
bin   dev   etc   home  proc  root  sys   tmp   usr   var
/ # exit  退出

(4)查询容器运行状态命令

[[email protected] ~]# docker ps / docker container ls  两个命令是一样的效果

  -a:查询所有的容器

注:容器内的第一个进程必须一直处于运行的状态,否则这个容器,就会处于退出状态!

[[email protected] ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
ced78e522fd7        nginx:1.14-alpine   "nginx -g ‘daemon ..."   5 minutes ago       Up 5 minutes        0.0.0.0:8888->80/tcp     web1
[[email protected] ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS                  NAMES
bcbf3d772a65        nginx:1.14-alpine   "nginx -g ‘daemon ..."   3 minutes ago       Up 3 minutes               0.0.0.0:8888->80/tcp   web1
9621f704b756        busybox             "/bin/sh"                3 minutes ago       Exited (0) 3 minutes ago                          b1

3.2.2 停止运行的容器

docker stop  关闭运行的容器

docker kill   杀死运行的容器

  -s:指定信号,和kill 用法一样;-9 强制停止容器

[[email protected] ~]# docker kill web1
web1
[[email protected] ~]# docker ps   只显示运行的容器
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[[email protected] ~]# docker ps -a   查询所有容器
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
bcbf3d772a65        nginx:1.14-alpine   "nginx -g ‘daemon ..."   5 minutes ago       Exited (137) 1 second ago                       web1
9621f704b756        busybox             "/bin/sh"                5 minutes ago       Exited (0) 5 minutes ago                        b1

3.2.3 激活关闭的容器

docker start

(1)格式

Usage: docker start [OPTIONS] CONTAINER [CONTAINER...]

(2)Options:

  • -a:附加到当前终端
  • -i:交互式

(3)示例

[[email protected] ~]# docker start web1
web1
[[email protected] ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
ced78e522fd7        nginx:1.14-alpine   "nginx -g ‘daemon ..."   9 minutes ago       Up 8 seconds        0.0.0.0:8888->80/tcp    web1

3.2.4 查看容器的详细信息

[[email protected] ~]# docker inspect web1
[[email protected] ~]# docker inspect web1 |grep "IPAddress"   比如我查询到容器的ip
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",
[[email protected] ~]# curl 172.17.0.2   通过容器的IP,在宿主机上访问服务
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
[[email protected] ~]# curl 127.0.0.1:8888  映射到宿主机的端口是8888
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>

3.2.5 删除容器

[[email protected] ~]# docker kill web1  先关闭容器,再删除容器
b1
[[email protected] ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[[email protected] ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                       PORTS               NAMES
bcbf3d772a65        nginx:1.14-alpine   "nginx -g ‘daemon ..."   6 minutes ago       Exited (137) 2 seconds ago                       web1
9621f704b756        busybox             "/bin/sh"                6 minutes ago       Exited (0) 6 minutes ago                         b1
[[email protected] ~]# docker rm web1
web1
[[email protected] ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                       PORTS               NAMES
9621f704b756        busybox             "/bin/sh"                6 minutes ago       Exited (0) 6 minutes ago                         b1
[[email protected] ~]# docker rm -f `docker ps -a -q` 删除所有容器,-f 强制删除
9621f704b756
[[email protected] ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

3.2.6 对运行的容器执行指定命令exec

[[email protected] ~]# docker exec / docker container exec

(1)格式

Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

(2)options 选项

  • -d:在后台运行命令
  • -e:设置环境变量
  • -i:交互式
  • -t:打开一个终端
  • -u:用户名或UID

(3)示例

[[email protected] ~]# docker run --name web1 -d nginx:1.14-alpine
81f336e878c0fb3187596f2acd12705d94f532978a8ad37c9f8ae33cc39bfb61
① 交互式进入容器
[[email protected] ~]# docker exec -it web1 /bin/sh
/ # ls /
bin    etc    lib    mnt    root   sbin   sys    usr
dev    home   media  proc   run    srv    tmp    var
/ # exit
② 查询ip
[[email protected] ~]# docker exec web1 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
43: [email protected]: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe11:2/64 scope link
       valid_lft forever preferred_lft forever

3.2.7 查询容器内部日志

[[email protected] ~]# curl 172.17.0.2
[[email protected] ~]# docker logs web1
172.17.0.1 - - [03/Jan/2019:09:00:42 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"

3.2.8 一图总结对容器的操作命令

原文地址:https://www.cnblogs.com/along21/p/10215701.html

时间: 2024-08-29 20:55:58

Docker 基础入门的相关文章

Docker基础入门实战(一)

Docker基础入门实战 第1章          docker简介 1.1  what is Docker Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源,源代码部署在GitHub上. Docker是通过内核虚拟技术来提供容器的资源隔离与安全保障,由于Docker通过操作系统层的虚拟化实现隔离,所以Docker容器在运行时,不需要类似虚拟机(VM)额外的操作系统开销,从而提高资源的利用率. Docker的目标是实现轻量级的操作系统虚拟化解决方案. 1.2 

Docker基础入门及示例

Docker近几年的发展可谓一日千里,特别从是2013年随着一个基于LXC的高级容器引擎开源,到现在,其在linux和windows上都有了很好的支持,并且已经有很多公司将docker用于实际的生产环境部署当中.这篇文章我将针对以下几个方面简单介绍: 1. docker的基础介绍 2. docker在windows下的安装配置 3. 基础命令介绍 4. 使用vs2017在docker下调试 5. 打包一个.net core站点镜像 一. docker基础介绍 可能很多朋友对docker还停留在听

Docker基础入门 (一)—— 简介

Docker -- 简介 1. Doker是个什么玩意 说Docker是什么之前,先来看一看Docker为什么会出现.我们知道,在学习过程中我们需要频繁地安装配置一些软件,不管是在Windows下还是在Linux,这些东西的配置过程都是非常费时费力的,稍有不慎就得删了重来,换一台机器,还得重来一次,更讨厌的是经常出现一些环境的兼容性问题(比如一些软件只兼容win7).那么有没有这样一种解决方式:软件带环境安装,省去麻烦的安装配置过程,并且完全不用考虑环境兼容问题,因为自带环境嘛.也就是说,安装的

docker基础入门之二

一.docker文件系统: linuxFS包括boot file system 和 root file system boot file system (bootfs),包含bootloader和kernel,在系统启动完成后,kernel滞留内存,bootfs解除挂载: root file system(rootfs),包括类似/bin,/usr, /lib等目录,这些和kernel无关,这也是不同linux发行版本的差异所在:       Linux  FS Linux FS in Dock

docker基础入门之一

一.概述 dotCloud是docker公司的前身,专注于PaaS的云计算平台:可能是支持最广泛的PaaS平台: 使用container的概念来解决应用stack部署的难题: 定义:什么是docker 开源的应用容器引擎,方便打包发布应用到容器中: Go语音领域比较大型的应用: docker实现: docker是container技术的实现,最早使用LXC作为container的引擎,最新版本的docker使用libcontainer替换了lxc: 采用aufs文件系统来管理Image和cont

docker基础入门

docker安装配置系统版本(centos 6.5 x64) 注意:centos系统版本需要是centos 6 以上,并且系统需要是64位才能安装docker,如果是不是64位系统安装的时候会提示找不到docker-io 简介:Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app).几乎没有性能开销,可以很容易地在

1、Docker基础入门实战

1.系统版本 [[email protected] ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 2.关闭selinux [[email protected] ~]# sed -i 's/=enforcing/=disabled/g' /etc/selinux/config [[email protected] ~]# getenforce Enforcing [[email protected] ~]# set

Docker基础入门总结

一.什么是Docker 官方文档描述:“Docker is an open platform for developing, shipping, and running applications. Docker enables you to separate your applications from your infrastructure so you can deliver software quickly. With Docker, you can manage your infrast

Docker基础入门篇

参考资料 Docker官网 Docker介绍 Docker是一个开源的应用容器引擎,可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低. 原文地址:https://www.cnblogs.com/feiqiangsheng/p/11179365.html