Docker入门学习笔记

Docker架构

镜像(Image) Docker 镜像相当于root文件系统。

容器(Container) 镜像和容器相当于,类和实例。容器可以被创建,启动,停止,删除

仓库(Repository)仓库可以看成代码控制中心,保存镜像

Docker Hello world

docker run ubuntu:15.10 /bin/echo "Hello world"

  • run参数用来运行一个容器
  • ubuntu:15.10 表示镜像名+tag
  • /bin/echo "Hello world" 需要再容器中执行的命令

运行交互式的容器

docker run -i -t 让docker运行的容器实现对话

-t : 在新容器内指定一个伪终端或终端

-i : 允许你对容器内的标准输入输出进行交互

通过exit或者CTRL+D来退出容器

保持后台运行

  • -d 在后台运行容器,并且打印容器id

容器状态STATUS:create | restarting | running or Up | removing | pause | exited (停止) | dead

在宿主主机内使用docker logs,查看容器的标准输出

通过docker stop停止容器,停止后容器不存在

Docker 容器使用

容器使用

拉取镜像

docker pull ubuntu

启动容器

docker run -it ubuntu /bin/bash

启动已停止运行的容器

docker ps -a 

查看所有容器

image-20210126142143284

docker start <容器 ID>

加入了-d参数默认不会进入容器,想要进入容器需要使用指令docker exec

停止容器

docker stop <容器 ID>

停止的容器也可以是同docker restart重启

进入容器

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

  • docker attach 使用此命令退出容器,会导致容器的停止
  • docker exec : 推荐使用,因此退出容器终端不会导致容器的停止
docker exec -it <容器 ID> /bin/bash

导出和导入容器

导出本地某个容器,可以使用docker export命令

docker export  容器 ID  > ubuntu.tar

删除容器

docker  rm  -f   容器 ID 

清理掉所有终止状态

docker container prune

WEB应用容器

 docker pull training/webapp  # 载入镜像
 docker run -d -P training/webapp python app.py
  • -p :将容器内部使用的网络端口随机映射在主机上。同时P也可以设置端口 5000:5000

image-20210126161038975

网络端口的快捷方式

通过docker ps 命令可以查看到容器的端口映射。

docker还提供另外的快捷方式

docker port可以查看指定容器的某个确定映射端口号

查看应用日志

动态展示 类似于 tail -f

docker logs -f <容器 id>

查看WEB应用程序容器的进程

可以使用docker top产看容器内部运行的程序

docker top     NAME OR ID

Docker 镜像使用

当运行容器时,使用的镜像如果在本地不存在,docker就会自动从docker镜像仓库中下载,默认是从Docker Hub公共镜像下载

列出镜像列表

使用docker images 来列出本地镜像

docker images

image-20210126165538053

  • REPOSITORY : 表示镜像的仓库源
  • TAG:镜像的标签

同一仓库源可以有多个TAG,代表整个仓库源的不同个版本。可以使用RESPOSITORY:TAG来定义不同的镜像

获取一个新的镜像

当本地使用不存在的镜像试试Docker就会自动下载镜像。如果要预先下载可以预先使用docker pull下载

使用docker search搜索合适的镜像

删除镜像

docker rmi hello-world

创建镜像

当从 docker 镜像仓库中下载的镜像不能满足需求,可以通过 以下两种方式进行更改

  1. 从一创建的容器中更新镜像,并提交镜像
  2. 使用Dockerfile指令来创建一个新的镜像

更新镜像

更新镜像之前,使用镜像来创建一个容器

docker run -t -i ubuntu:15.10 /bin/bash

运行的容器内使用apt-get update 命令进行更新

在完成操作之后,使用exit退出容器

此时容器,是按照需求更改的容器。可以通过docker commit来提交容器副本

 docker commit -m="udpate message" -a="author" <容器ID> buntu:15.10

参数说明:

  • -m:提交描述信息
  • -a:指定镜像的作者
  • buntu:15.10 ::指定要创建的目标镜像名称

构建镜像

使用docker build,创建新的镜像。需要创建Dockerfile文件,其中包含一组指令如何构建镜像

FROM centos:6.7

MAINTANER  Fisher "fisher@xx.com"
RUN /bin/echo 'root:123456' | chpasswd
EXPOSE 22
CMD /usr/sbin/sshd -D

每一个指令都会在镜像上添加一个新的层,前缀必须大写。

FROM指定使用了哪个镜像源

RUN指令告诉docker在镜像中执行什么命令,安装什么

最后使用Docker文件,通过docker build来构建镜像

docker build -t  personal/centos:6.7
  • -t : 指定要创建的目标镜像名
  • . : Dockerfile文件所在目录,可以指定Docker的绝对路径
  • -f : 指定要使用的Dockerfile路径

设置镜像标签

docker tag <镜像 ID>  personal/centos:dev

通过此操作会添加一个镜像ID相同,TAG不同的镜像

Docker容器连接

容器中运行网络应用,可以通过 -p-P参数指定端口映射。

网络端口映射

  • -P:是指容器内部端口随机映射到主机的高端口
  • -p:是容器内部端口绑定到指定的主机端口

也可以指定容器绑定的网络地址

docker run -d -p 127.0.0.1:5001:5000 person/webapp python app.py

如此可以通过访问127.0.0.1:5001来访问容器的5000端口

默认都是绑定tcp端口,如果要绑定UDP端口,可以在端口后面加上/udp

docker run -d -p 127.0.0.1:5001:5000/udp person/webapp python app.py

通过docker port NAME 5000 可以查看端口绑定情况

Docker容器互联

docker有一个连接系统允许将多个容器连接在一起,共享连接信息

docker连接会创建一个父子关系,其中父容器可以看到子容器的信息

容器命名

当创建容器时,docker会自动进行命名。同时,可以使用--name表示来命名容器

docker run -d --name NAME training/webapp python app.py

新建网络

先创建一个新的Docker网络

docker network create -d bridge test-net
  • -d : 参数指定Docker网络类型,有bridge,overlay

其中overlay网络类型用于Swarm mode

连接容器

运行一个容器并连接新建的test-net网络

docker run -itd --name test1 --network test-net ubuntu /bin/bash

打开新终端,在运行一个容器并记入到test-net网络

docker run -itd --name test2 --network test-net ubuntu /bin/bash

此时test1容器和test2容器建立了互联关系

image-20210127154007240

配置DNS

可以在宿主机的 /etc/docker/daemon.json 文件中增加以下内容设置容器DNS:

{
    "dns":[
        "114.114.114.114",
        "8.8.8.8"
    ]
}

配置完成需要重启docker生效

查看容器的DNS是否生效使用以下命令

docker run -it --rm ubuntu cat etc/resolv.conf

手动指定容器配置

只设置特定容器DNS

docker run -it --rm -h host_ubuntu --dns=114.114.114.114 --dns-search=test.com ubuntu

参数说明

--rm :容器退出时自动清理容器内部的文件系统

-h HOSTNAME 或--hostname=HOSTNAME :设定容器主机名,会被写道容器的/etc/hostname和/etc/hosts

--dns=IP_ADDRESS: 添加 DNS 服务器到容器的 /etc/resolv.conf 中,让容器用这个服务器来解析所有不在 /etc/hosts 中的主机名。

--dns-search=DOMAIN: 设定容器的搜索域,当设定搜索域为 .example.com 时,在搜索一个名为 host 的主机时,DNS 不仅搜索 host,还会搜索 host.example.com

Docker仓库管理

Docker Hub

登录登出

输入用户名密码,登录成功后,可以从docker hub上拉去自己账号下的全部镜像

docker login  // docker logout

拉取镜像

docker search ubuntu

将镜像下载到本地

docker pull ubuntu

推送镜像

用户登陆后

通过docker push 将镜像推送到Docker Hub

posted @ 2021-01-27 11:18  NGinko  阅读(78)  评论(0编辑  收藏  举报