docker容器

作者: 我傻笑你跑掉 | 来源:发表于2021-03-11 14:39 被阅读0次

    容器(containe)是镜像的运行时实例.

    容器

    如果镜像是一个模版,那么容器(containe)就是镜像的运行时实例.

    为什么要使用容器

    与传统的虚拟机相比,容器有如下优势

    • 容器共享主机的资源, 更加轻巧.
    • 容器可以根据需要加载必需的库、依赖项和文件.
    • 容器可以更好在生产环境进行迁移.

    启动容器

    使用docker run -option image:tag command命令 command参数来启动一个容器, 如:

    docker run -it mysql /bin/echo hello world!
    

    上述命令会启动一个容器并输出


    启动容器

    option可选列表如下

    • -d 容器在后台以domain模式运行,返回容器id
    • -i 以交互模式运行 通常与 -t一起使用
    • -P 容器内部端口随机映射到主机端口
    • -p 指定端口映射 格式 主机端口:容器端口
    • -t: 为容器重新分配一个伪输入终端m,通常与-i同时使用 -it一起使用可以将当前终端连接到容器终端
    • --name="newname"" 为容器指定一个名称
    • --dns 指定容器DNS,默认与宿主一致
    • --dns-search example.com 指定容器DNS搜索域名,默认和宿主一致
    • -h 指定容器的hostname
    • -e key=value 设置环境变量
    • --env-file=[] 从指定文件读取环境变量
    • --cpuset="0-2" or --cpuset="0,1,2" 绑定容器到指定CPU运行
    • -m 设定容器最大内存
    • --net="bridge" 指定容器的网络连接类型,支持bridge/host/none/container四种类型
    • --link=[] 添加链接到另一个容器
    • --expose=[] 开放一个端口或一组端口
    • --volume,-v 绑定一个卷

    与容器交互

    使用-it参数可以启动一个伪终端

    docker run -it test:v1
    
    -it开启伪终端

    容器后台运行

    容器会在执行完成command或者退出bash后终止,使用-d参数可以指定容器后台运行,此处用mysql镜像启动一个容器

    docker run -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
    

    成功启动后会返回这个容器的id

    防止容器退出

    docker容器同时只能管理一个进程,如果这个进程退出那么容器也就退出了.例子

    docker run -it --name test1 centos:latest /bin/sh
    

    启动一个名为test1的centos镜像,然后输出exit并回车,然后docker ps -a发现这个容器已经退出

    628d9bded677   centos:latest   "/bin/sh"   7 seconds ago   Exited (0) 4 seconds ago             test1
    

    exit命令结束了docker管理的/bin/sh进程,因而无论是否这个容器中有没有其他进程在后台运行,容器都会退出.

    换句话说,docker run指定的容器启动时运行的程序结束,那么容器就会退出.

    如何避免呢,可以在执行上述命令后,按CTRL+P+Q切出,此时容器并不会退出.

    docker run -it --name test1 centos:latest /bin/sh
    

    然后按CTRL+P+Q切出,再查看.

    b30c4510a76c   centos:latest   "/bin/sh"   1 minutes ago   Up 1 minutes                         test1
    

    查看容器运行状态

    使用docker ps或者docker container ls命令查看运行状态,与linuxps 命令非常相似

    ps

    这里docker ps的命令包括:

    • -a 列出所有容器
    • -l 列出最新创建容器
    • -n=2 列出最近创建的2个容器
    • -q 仅列出容器ID
    • -s 显示容器大小

    如果要查看所有容器,使用docker ps -a

    ps -a

    查款容器日志

    使用docker logs container_id|name命令来查看容器日志.

    容器重命名

    在创建一个容器的时候,docker后自动对其进行重命名,也可以使用--name来指定,以mysql为例

    docker run -e MYSQL_ROOT_PASSWORD=123456 --name mysql_server -d mysql:5.6
    
    --name 重命名容器

    登陆到容器

    -d指定容器后台运行后,可以使用两种方式登陆到容器.

    • docker attach container_id 不推荐,退出会导致容器停止运行.
    • docker exec 推荐
     docker exec -it mysql_server /bin/bash
    
    exec

    检视容器

    使用docker inspect container_id|container_name命令来查看检视容器,通常会包含一些非常有用的信息

    docker inspect mysql_server
    
    检视容器信息

    设置容器端口

    启动mysql后,可以使用-p 宿主端口:容器端口参数映射容器端口与宿主机端口,宿主端口和容器端口设置成不一样的只
    比如12345:54321表示宿主的12345端口映射到容器的54321端口.

    上面已经启动了一个mysql容器,容器中mysql进程监听的是容器的3306端口,由于没有指定端口映射,在宿主机是无法访问容器中的mysql.

    如果想要外部访问,启动一个新的mysql容器并绑定到宿主机的3306端口.

    docker run -e MYSQL_ROOT_PASSWORD=123456 --name mysql_server_new -p 3306:3306 -d mysql:5.6
    
    设置端口映射
    可以使用docker port container_id/name来查看一下容器的端口映射
    docker port mysql_server_new
    

    3306/tcp -> 0.0.0.0:3306

    还可以使用docker ps,可以看到PORTS显示 3306->3306,测试一下

    宿主机连接mysql

    注:此处表述有误,无法访问并不是完全无法访问,使用iptable工具映射过去也可以,比较麻烦而已.

    关闭容器

    使用docker container start/stop/restart container_id来启动或停止一个容器

    除此之外,还可以使用docker -kill container_id 来强行停止一个容器

    删除容器

    使用docker rm container_i来删除一个容器,下面id为226db43edaedab3d300443cd的容器.

    delete

    导入导出

    使用docker export container_id > localfile导出容器快照为本地文件.

    docker export mysql_server_new > mysql.tar
    

    使用docker import file/url image_name:tag来将一个容器快照导入为本地快照

    docker import mysql.tar mysql_import_test:v1
    
    import
    mysql容器的快照被导入成了一个本地镜像.

    可以使用docker commit命令将本地容器快照导出为一个本地镜像

    docker commit -a "zhangsheng" -m "mysql image" mysql_server_new test_mysql:v11111
    
    commit
    commit参数如下
    • -a :提交的镜像作者
    • -c :使用Dockerfile指令来创建镜像
    • -m :提交时的说明文字
    • -p :在commit时,将容器暂停

    相关文章

      网友评论

        本文标题:docker容器

        本文链接:https://www.haomeiwen.com/subject/crznqltx.html