Docker入门

Docker


docker 简介

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

1.2 docker 的本质

简单来说,容器和虚拟机具有相似的资源隔离和分配优势,但功能有所不同,因为容器虚拟化的是操作系统,而不是硬件,因此容器更容易移植,效率也更高。 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程; 而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

1.3 docker 的安装

yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli --allowerasing

1.4 设置国内镜像源

执行如下命令:

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
        "http://hub-mirror.c.163.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://registry.docker-cn.com"
    ]
} 
EOF

image-20220605000950368

重启 docker 服务,并查看是否启动成功

image-20220605001145097

1.5 docker 指令

使用 docker search 命令来搜索镜像。

比如我们需要一个 nginx 的镜像来作为我们的 web 服务。我们可以通过 docker search 命令搜索 nginx 来寻找适合我们的镜像。

docker search nginx

image-20220605002420911

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

1.5.2 docker pull

使用命令 docker pull 来下载镜像。

docker pull nginx

image-20220605002738846

1.5.3 docker images

使用 docker images 来列出本地主机上的镜像。

image-20220605002839317

各个选项说明:

  • REPOSITORY: 表示镜像的仓库源
  • TAG: 镜像的标签
  • IMAGE ID: 镜像 ID
  • CREATED: 镜像创建时间
  • SIZE: 镜像大小

1.5.4 docker run

创建一个新的容器并运行一个命令,其中常用的参数如下:

-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="fsec": 为容器指定一个名称;
-v: 绑定一个卷;
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;

使用镜像 nginx:latest 以后台模式启动一个容器,并将容器命名为 fsec1.

docker run --name fsec1 -d nginx:latest

使用镜像 nginx:latest 以后台模式启动一个容器,并将容器的 80 端口映射到主机随机端口,同时容器命名为 fsec2.

docker run --name fsec2 -P -d nginx:latest

使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 8080 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data,,同时容器命名为 fsec3.

docker run --name fsec3 -p 8888:80 -v /data:/data -d nginx:latest

1.5.5 docker ps

用于列出容器,常用参数如下:

-a :显示所有的容器,包括未运行的。
-f :根据条件过滤显示的内容。
-q :静默模式,只显示容器编号。

列出所有在运行的容器信息

docker ps

image-20230910155941584

输出详情介绍:

CONTAINER ID: 容器 ID。

IMAGE: 使用的镜像。

COMMAND: 启动容器时运行的命令。

CREATED: 容器的创建时间。

STATUS: 容器状态。

状态有 7 种:

  • created(已创建)
  • restarting(重启中)
  • running(运行中)
  • removing(迁移中)
  • paused(暂停)
  • exited(停止)
  • dead(死亡)

PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。

NAMES: 自动分配的容器名称。

列出所有创建的容器 ID

docker ps -a -q
docker ps -aq

image-20230910160050561

1.5.6 docker start/stop/restart

docker start:启动一个或多个已经被停止的容器
docker stop :停止一个运行中的容器
docker restart:重启容器

指令中,可以填写 CONTAINER ID 或 NAMES 进行参数的指定。

image-20220605005450670

1.5.7 进入容器执行命令行

进入已经启动的容器,开启一个交互模式的终端

docker exec -ti fsec3 /bin/bash

创建容器时,直接进入终端

docker run --name fsec4 -ti nginx:latest /bin/bash

1.5.8 docker rm/rmi

删除容器 docker rm 

删除已启动的容器会报错,可以停止再删,或者强制删除
强制删除容器  docker rm -f       

批量删除
docker rm -f $(docker ps -a -q)

image-20230910160247420

删除镜像 docker rmi

image-20230910160341582

1.5.9 文件传递

从主机复制到容器

docker cp 主机路径 容器ID:容器路径
docker run --name fsec-nginx1 -P -d nginx:latest
docker cp /etc/passwd fsec-nginx1:/opt
docker exec -ti fsec-nginx1 cat /opt/passwd

image-20230910160407493

从容器复制到主机

docker cp 容器ID:容器路径 主机路径
docker cp fsec-nginx1:/opt/passwd /opt
cat /opt/passwd

image-20230910160450265

1.5.10 docker commit

从容器创建一个新的镜像,常用参数如下:

-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。
[root@C1 ~]# docker ps
[root@C1 ~]# docker exec -ti fsec-nginx1 /bin/bash
root@1df5bff6cad7:/# ls /opt
root@1df5bff6cad7:/# exit
[root@C1 ~]# docker commit -a "fsec.io" -m "fsec-nginx" 1df5bff6cad7 fsec/v1
[root@C1 ~]# docker commit -a "fsec.io" -m "fsec-nginx" 1df5bff6cad7 fsec:v1

image-20230910160511007

docker run --name fsec-v1 -p 9999:80 -d fsec:v1 
docker exec fsec-v1 ls /opt

image-20230910160535062

1.5.11 docker save/load

docker save 将指定镜像保存成 tar 归档文件,通过-o 指定输出到的文件。

[root@C1 ~]# docker save -o fsec_v1.tar fsec:v1

image-20230910160611914

docker load :导入使用 docker save 命令导出的镜像,通过-i 指定导入的文件。

docker rm -f $(docker ps -a -q)
docker rmi xxx
docker images
docker load -i fsec_v1.tar

image-20230910160723992

1.7 docker-compose

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,可以使用 YAML 文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务。

Docker-Compose 是一个容器编排工具。通过一个.yml 或.yaml 文件,将所有的容器的部署方法、文件映射、容器端口映射等情况写在一个配置文件里,执行 docker-compose up 命令就像执行脚本一样,一个一个的安装并部署容器。

Docker Compose 将所管理的容器分为三层:

工程(project); 服务(service); 容器(container);

使用 compose 这个容器编排工具,必须下载 docker-compose 这个命令

curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose -v

构建简单的 Nginx 服务.yml 文件:

[root@C1 ~]# vim docker-compose.yml

version: "3"                            //指定语法的格式的版本
services:                               //定义服务
  nginx:                                //服务的名称
    container_name: fsec-nginx1         //容器的名称
    image: nginx:latest                 //所使用的镜像
    restart: always                     //随docker服务的启动而启动
    ports:
      - 8888:80                         //映射的端口
    volumes:
      - /data/fsec-nginx1:/usr/share/nginx/html  //本地与容器挂载的目录
      ps:实际操作的时候,把注释的内容去除掉,否则可能报错
docker-compose -f /root/docker-compose.yml up -d

image-20230910160756588

1.8 dockerfile

dockerfile 就是用来构建 docker 镜像的构建文件,命令参数脚本。

构建步骤: 1、编写一个 dockerfile 文件 2、docker build 构建成为一个镜像 3、docker run 运行镜像 4、docker push 发布镜像

Dockerfile 的指令

FROM #基础镜像,一切从这里开始构建
MAINTAINER #镜像是谁写的,名字+邮箱
RUN #镜像构建的时候被需要运行的命令
ADD #步骤,tomcat镜像,这个tomcat压缩包,添加内容
WORKDIR #镜像的挂载目录
VOLUME #挂载的目录
EXPOST #保留端口配置
CMD #指定这个容器启动的时候要运行的命令,只有之后一个会生效,可被替代
ENTRYPOINT #指定这个容器启动的时候要运行的命令,可以追加命令
COPY #类似ADD,将我们文件拷贝到镜像中
ENV #构建的时候设置环境变量

测试一:定制一个 nginx 镜像

构建好的镜像内会有一个 /usr/share/nginx/html/index.html 文件 在一个空目录下,新建一个名为 Dockerfile 文件,并在文件内添加以下内容:

FROM nginx
RUN echo 'hello world' > /usr/share/nginx/html/index.html
docker build -t nginx:v3 .

image-20230910160818159

posted @ 2023-09-10 16:19  解放者-cracer  阅读(8)  评论(0编辑  收藏  举报