docker入门教程

发布时间:2021/05/06 作者:天马行空 阅读(1236)

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。


使用docker之前需要先了解几个概念:

镜像(image):Docker 镜像是一个只读的模板,镜像可以用来创建 Docker 容器。Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。镜像是一种文件结构。Dockerfile中的每条命令都会在文件系统中创建一个新的层次结构,文件系统在这些层次上构建起来,镜像就构建于这些联合的文件系统之上。Docker官方网站专门有一个页面来存储所有可用的镜像,网址是:index.docker.io。

容器( Container):容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的 Linux 环境,Docker 利用容器来运行应用。

仓库:仓库是集中存放镜像文件的场所,仓库注册服务器(Registry)上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。目前,最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。


一、docker安装


1、centos
安装:curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
启动docker:sudo systemctl start docker
启动docker:sudo systemctl restart docker

2、windows安装
下载windows安装包:https://hub.docker.com/editions/community/docker-ce-desktop-windows
安装docker之前需要先打开Hyper-V,具体开启方式参考其他资料。

3、测试是否安装成功
安装之后,可以打开 PowerShell 并运行以下命令检测是否运行成功:
docker run hello-world


二、Docker 镜像使用


1、查找镜像
docker search httpd

NAME: 镜像仓库源的名称
DESCRIPTION: 镜像的描述
OFFICIAL: 是否 docker 官方发布
stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
AUTOMATED: 自动构建。

2、获取一个新的镜像
先在这个官方仓库中去找对应的镜像:https://hub.docker.com/search?q=&type=image
下载镜像到本地:docker pull httpd

3、列出镜像列表
docker images
各个选项说明:
    REPOSITORY:表示镜像的仓库源
    TAG:镜像的标签
    IMAGE ID:镜像ID
    CREATED:镜像创建时间
    SIZE:镜像大小

4、删除镜像
docker rmi httpd
注意删除镜像之前需要删除镜像创建的对应容器,否则会报错

5、创建镜像
当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。
1)从已经创建的容器中更新镜像,并且提交这个镜像
docker commit -m="httpd update" -a="netljc" 4d6af5132491 netljc/httpd:v1
各个参数说明:
    -m: 提交的描述信息
    -a: 指定镜像作者
    4d6af5132491容器 ID
    netljc/httpd:v1: 指定要创建的目标镜像名

2)使用 Dockerfile 指令来创建一个新的镜像

vi Dockerfile 
FROM    centos:6.7
MAINTAINER      Fisher "fisher@sudops.com"
RUN     /bin/echo 'root:123456' |chpasswd
RUN     useradd runoob
RUN     /bin/echo 'runoob:123456' |chpasswd
RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE  22
EXPOSE  80
CMD     /usr/sbin/sshd -D


每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
第一条FROM,指定使用哪个镜像源
RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。
然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。

docker build -t runoob/centos:6.7 .
参数说明:
    -t :指定要创建的目标镜像名
    . :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

3)导出镜像
导出到服务器:docker save netljc/httpd:v1 > /home/httpd.tar
导出到本地:docker save -o D:/netljc/docker/httpd.tar netljc/httpd:v1

4)导入镜像
从服务器导入:docker load < /home/httpd.tar
从本地导入:docker load -i D:/netljc/docker/httpd.tar


6、设置镜像标签
docker tag ebab5d4f609c runoob/centos:dev
ebab5d4f609c为IMAGE ID,通过docker images查看

三、Docker 容器使用


1、使用镜像创建容器
docker run -it --name test-httpd --privileged=true httpd /bin/bash
--net=host 与宿主机共享网络,不需要映射端口
--privileged=true 让容器拥有root权限
如果报WARNING: IPv4 forwarding is disabled. Networking will not work.的错误,就在宿主机上执行
vim /usr/lib/sysctl.d/00-system.conf 或者 vim /etc/sysctl.conf
追加 net.ipv4.ip_forward=1
重启网络systemctl restart network

参数说明:
    -i: 交互式操作。
    -t: 终端。
    -d:后台运行
    -P :是容器内部端口随机映射到主机的高端口。
    -p : 是容器内部端口绑定到指定的主机端口。
    -name:指定容器名称
    httpd镜像。
    /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
要退出终端,直接输入 exit:

2、查看所有的容器
docker ps -a
-a 查看所有,不加此参数默认查看运行中的

3、启动一个已停止的容器
docker start/restart  b750bbbcfd88

4、停止一个容器
docker stop b750bbbcfd88

5、进入容器
在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:
docker attach
docker attach 1e560fca3906

docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。
docker exec -it 243c32535da7 /bin/bash

6、导出容器快照
docker export 243c32535da7 > ubuntu.tar

7、导入容器快照
cat docker/ubuntu.tar | docker import - test/ubuntu:v1
此外,也可以通过指定 URL 或者某个目录来导入

8、删除容器
docker rm -f 1e560fca3906

9、清理掉所有处于终止状态的容器
docker container prune

10、查看容器的某个确定端口映射到宿主机的端口号
docker port bf08b7f2cd89
5000/tcp -> 0.0.0.0:5000

11、查看容器内部的标准输出
docker logs -f bf08b7f2cd89
-f: 让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出。

12、查看容器中应用程序的进程
docker top bf08b7f2cd89

13、查看容器的底层信息
docker inspect bf08b7f2cd89


四、Docker 容器互联


创建一个新的 Docker 网络:

docker network create -d bridge test-net

参数说明:
-d:参数指定 Docker 网络类型,有 bridge、overlay。

运行一个容器并连接到test-net网络
docker run -itd --name network1 --network test-net runoob/centos:6.7 /bin/bash
docker run -itd --name network2 --network test-net runoob/centos:6.7 /bin/bash

在宿主机上配置所有容器的 DNS

vi /etc/docker/daemon.json 
{
  "dns" : [
    "114.114.114.114",
    "8.8.8.8"
  ]
}


五、仓库管理


注册:https://hub.docker.com
登录:docker login
退出:docker logout
推送镜像:docker push netljc/php7.3:v1

关键字docker linux