zoukankan      html  css  js  c++  java
  • 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"]                 #开启容器时
    
  • 相关阅读:
    使用JDBC连接MySql时出现:The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration
    Mysql Lost connection to MySQL server at ‘reading initial communication packet', system error: 0
    mysql-基本命令
    C# 监听值的变化
    DataGrid样式
    C# 获取当前日期时间
    C# 中生成随机数
    递归和迭代
    PHP 时间转几分几秒
    PHP 根据整数ID,生成唯一字符串
  • 原文地址:https://www.cnblogs.com/shenjuxian/p/13746695.html
Copyright © 2011-2022 走看看