• Docker简单使用教程


    Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

    Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

    容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

    说白了就是一个开销更低,安装更便捷的虚拟机。

    这里介绍一点简单的Docker使用教程,详细教程参考菜鸟教程


    Docker 基本语法

    安装 Docker

    Ubuntu下使用命令:

    apt-get install docker.io
    curl -sSL https://get.daocloud.io/docker | sh
    

    下载镜像

    docker pull + 镜像名:标签
    eg:docker pull ubuntu:20.04
    

    Docker 官方提供了Docker Hub仓库,所有用户都可以向Docker Hub贡献自己制作的Docker镜像。

    创建容器

    docker run -it -p 90:80 ubuntu:20.04   /bin/bash
    

    在这里插入图片描述
    -i 在新容器内指定一个伪终端或终端。
    -t 允许你对容器内的标准输入 (STDIN) 进行交互。
    -p 进行端口映射。90:80指的是将主机的90端口映射到容器的80端口。
    ubuntu:20.04 镜像名:标签,这里调用20.04版本的ubuntu系统,如果本地上没有相关镜像会自动从Docker Hub上下载。
    /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
    运行完成以后,直接进入了Docker容器,这里基本上可以把它当成一个真实的ubuntu机进行使用。输入exit退出容器,退出时容器关闭。
    在这里插入图片描述

    如果希望建立一个后台运行的Docker容器的话,可以采用。

    docker run -dt -p 90:80 ubuntu:20.04   /bin/bash
    

    -d指的是进行后台运行。

    开启/关闭 容器

    docker ps -a    #列出所有容器
    docker ps    #列出正在运行的容器
    docker start + 容器id    #开启容器
    docker stop  +容器id    #关闭容器
    

    在这里插入图片描述
    输出详情介绍:
    CONTAINER ID: 容器 ID。
    IMAGE: 使用的镜像。
    COMMAND: 启动容器时运行的命令。
    CREATED: 容器的创建时间。
    STATUS: 容器状态。
    PORTS: 容器的端口信息和使用的连接类型(tcpudp)。
    NAMES: 自动分配的容器名称。

    主机连接Docker

    使用exit退出后,Docker默认会关闭掉,使用docker start重启容器但是并没有进入容器,此时可以用docker attach或者docker exec命令来进行连接。

    docker attach + 容器id
    

    在这里插入图片描述
    这个命令有个缺点,使用exit退出后容器不会在后台运行,而是跟原来一样被关闭,而docker exec不会有这个问题。

    docker exec -it +容器id  /bin/bash
    

    在这里插入图片描述

    导出/导入容器

    docker export 容器id  > ubuntu.tar
    

    在这里插入图片描述
    这里将整个容器导出成ubuntu.tar这个包,就可以进行转移。

    cat ubuntu.tar | docker import - test/ubuntu:v1
    

    在这里插入图片描述
    这里将ubuntu.tar导入成镜像,镜像名叫test/ubuntu,标签为v1

    删除容器

    docker rm +容器id
    

    正在运行的容器必须先停下再删除
    在这里插入图片描述

    Docker镜像

    • 列出本地主机上的镜像。
    docker images 
    

    在这里插入图片描述
    REPOSITORY:表示镜像的仓库源
    TAG:镜像的标签
    IMAGE ID:镜像ID
    CREATED:镜像创建时间
    SIZE:镜像大小

    • 查找镜像
    docker search httpd
    

    在这里插入图片描述

    • 获取镜像
    docker pull centos/httpd-24-centos7
    

    在这里插入图片描述

    • 删除镜像
    docker rmi +镜像名字:标签
    或者  docker rmi  镜像id
    

    在这里插入图片描述

    创建镜像

    • 1.从已经创建的容器中更新镜像,并且提交这个镜像。
    docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
    

    各个参数说明:
    -m: 提交的描述信息
    -a: 指定镜像作者
    e218edb10161:容器 ID
    1275178869/ubuntu:v2: 指定要创建的目标镜像名

    • 2.使用 Dockerfile 指令来创建一个新的镜像。
    #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 .
    

    不要忘了该命令的最后一个.,这里指的是Dockerfile所在的路径,.表示Dockerfile就在当前路径下。
    在这里插入图片描述
    查看一下镜像:
    在这里插入图片描述
    多了一个镜像,就是刚才创建的镜像。
    具体Dockerfile的编写后面会有介绍,这里就不赘叙了。

    设置镜像标签

    docker tag 镜像id 镜像名字:标签
    

    在这里插入图片描述


    Docker之Dockerfile

    Dockerfile菜鸟教程

    说白了,Dockerfile就是告诉Docker调用哪个镜像,执行哪些命令,执行完之后将容器导出为镜像。

    Dockerfile的编写主要是各种指令的调用,堆在一起就好了。

    FROM 和 RUN 指令

    FROM:定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像。后续的操作都是基于 nginx。

    RUN:用于执行后面跟着的命令行命令。
    举个栗子

    FROM nginx       #调用nginx镜像
    RUN echo '这是一个本地构建的nginx镜像' > /usr/share/nginx/html/index.html     #在/usr/share/nginx/html/目录下建一个index.html内容为  '这是一个本地构建的nginx镜像'
    

    在这里插入图片描述
    文件名必须是Dockerfile一点都不能错,内容就是这两行内容。

    然后执行

    docker build -t 镜像名称:标签 .
    

    注意千万别忘了最后那个点!
    在这里插入图片描述
    查看一下镜像,发现多了一个镜像叫nginx
    在这里插入图片描述
    尝试着运行一下

    docker run -it -p 900:80 nginx:v1 /bin/bash
    

    在这里将主机的900端口映射到容器的80端口,因为访问网页服务器都是默认在80端口。
    然后访问一波:
    在这里插入图片描述
    Successful!

    COPY指令

    复制指令,从上下文目录中复制文件或者目录到容器里指定路径。

    这个命令最强大的作用是可以将主机的文件拷贝到容器中,不然需要建共享文件夹等很麻烦的操作。

    COPY ./file  /tmp
    

    file目录以及其下的子目录全部拷贝到容器的/tmp文件夹中,接下去对文件的操作写在RUN指令中即可。

    CMD

    类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:

    • CMD 在docker run 时运行。
    • RUN是在 docker build。
    CMD <shell 命令> 
    CMD ["<可执行文件或命令>","<param1>","<param2>",...] 
    CMD ["<param1>","<param2>",...]  # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数
    
    CMD["service","apache2","start"]
    

    在run容器的时候开启Apache2服务。

    注意:如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。

    所以如果需要执行的命令比较多的话可以写一个sh脚本,直接在CMD里运行这个脚本即可。

    EXPOSE

    仅仅只是声明端口。
    作用:

    • 帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射。

    • 在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。

    EXPOSE <端口1> [<端口2>...]
    

    WORKDIR

    指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。(WORKDIR 指定的工作目录,必须是提前创建好的)。

    docker build 构建镜像过程中的,每一个 RUN 命令都是新建的一层。只有通过 WORKDIR 创建的目录才会一直存在。

    一个具体的示例

    FROM ctftraining/base_image_nginx_mysql_php_56        #导入镜像
    
    COPY src /var/www/html                                #将文件复制到/var/www/html
    
    RUN chown -R www-data:www-data /var/www/html/uploads &&                 #执行这三条指令
        mv /var/www/html/flag.sh / && 
        chmod +x /flag.sh
    
    EXPOSE 80                            #声明80端口
    
    CMD["service","apache2","start"]                 #开启容器时
    
  • 相关阅读:
    Building Forest CodeForces
    欢迎使用CSDN-markdown编辑器
    Travelling HDU
    Card Collector HDU
    Doing Homework HDU
    Mirror Number SPOJ
    Palindromic Numbers LightOJ
    Magic Numbers CodeForces
    Xor-sequences CodeForces
    Little Elephant and Elections CodeForces
  • 原文地址:https://www.cnblogs.com/shenjuxian/p/13746695.html
Copyright © 2020-2023  润新知