美文网首页
docker 容器

docker 容器

作者: 慕知 | 来源:发表于2021-03-25 11:28 被阅读0次

    容器就是对外提供服务的一个实例;
    容器启动的必要条件:容器内至少又一个进程运行在前台

    1,创建容器

    #格式   
    docker run [参数]  [镜像名称]    [运行容器的启动命令]
    
    
    #参数
    -d :以守护进程的方式运行一个容器
    
    [root@\ docker~]# docker run -d nginx
    
    
    
    --name:指定容器的名称,将名称解析到docker DNS上
    docker run -d --name [容器名称] [镜像的名称] [cmd]
    
    [root@\ docker~]# docker run -d --name nginx_store nginx
    [root@\ docker~]# docker ps
    14c63482dc1d   nginx     "/docker-entrypoint.…"   50 seconds ago   Up 48 seconds   80/tcp                 nginx_store
    
    
    
    
    -p:指定端口映射
         docker run -d -p 宿主机端口:容器内端口  [ 镜像名称]
    
    [root@\ docker~]# docker run -d -p 3456:80 nginx
    600266b0ad1dd9d898fdc0e4a341c1365b977f1639cba5dc316059a7a8e892e8
    [root@\ docker~]# docker ps
    CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                  NAMES
    600266b0ad1d   nginx     "/docker-entrypoint.…"   6 seconds ago    Up 5 seconds    0.0.0.0:3456->80/tcp   practical_dubinsky
    
    
    
    
    
    -P:随机端口映射
        docker run -d -p [ 镜像名称]
    
    [root@\ docker~]# docker run -d -P redis
    5c3403219107c2bdcbc2fa42a098a98d2e3119f6d71294f3d266eb46eaca82f3
    [root@\ docker~]# docker ps
    CONTAINER ID   IMAGE     COMMAND                  CREATED              STATUS              PORTS                     NAMES
    5c3403219107   redis     "docker-entrypoint.s…"   3 seconds ago        Up 2 seconds        0.0.0.0:49153->6379/tcp   nice_ardinghelli
    
    
    
    
    
    -i:打开标准输出
    -t:创建一个伪终端
          docker run -it [镜像名称]
    
    [root@\ docker~]# docker run -it centos:7 bash
    Unable to find image 'centos:7' locally
    7: Pulling from library/centos
    2d473b07cdd5: Pull complete
    Digest: sha256:0f4ec88e21daf75124b8a9e5ca03c37a5e937e0e108a255d890492430789b60e
    Status: Downloaded newer image for centos:7
    [root@9b6f9b3e7885 /]#
    
    
    
    
    -v:挂载目录到容器中
        docker run -v 宿主机目录:容器内目录 [镜像名称]
    
    [root@\ docker~]# docker run -v /root:/root -it centos:7 bash
    [root@2cc3f2761580 abc]# cd /root
    [root@2cc3f2761580 ~]# mkdir ppp
    [root@2cc3f2761580 ~]# touch /root/ppp/a.txt
    
    
    [root@\ docker~]# ll ppp/
    -rw-r--r-- 1 root root 0 2021-03-22 09:49 a.txt
    
    
    
    
    
    --rm:容器生命周期结束时立即删除
        docker run --rm [镜像名称]
    
    -e:在容器中创建一个环境变量
        docker run -e NAME=ZXX -的 [镜像名称]
    
    [root@\ docker~]# docker run -e NAME=ZXX -it centos:7 bash
    [root@1fc563bab6b7 /]# printenv
    HOSTNAME=1fc563bab6b7
    TERM=xterm
    NAME=ZXX
    ... ...
    
    
    
    
    
    
    --link:连接上一个容器,实现网络互通
        docker run --link 被连接的容器的名称:连接别名 [镜像名称]
    
    [root@\ docker~]# docker run -d --name ss_nginx -P nginx
    [root@\ docker~]# docker run --link ss_nginx:ss_nginx nginx
    
    
    
    
    -h:设置容器主机名
        docker run -h “主机名”  [镜像名]
    
    [root@\ docker~]# docker run -h centos -it centos:7 bash
    [root@centos /]#
    
    
    
    
    
    docker run运行流程:
    1,检查本地是否指定镜像,没有则去对应的仓库下载镜像
    2,启动容器,如果指定了命令使用指定的命令,没有则使用默认的cmd
    3,返回容器id
    
    

    2,查看本机的容器列表

    # 格式
        docker ps    查看当前系统中正在运行的容器列表
    
    
    # 参数
    -a :查看系统中所有的容器(包括停止的)
    -q:仅显示容器的id
    
    

    3,停止和启动一个容器

    # 停止
       doker stop [容器的名称或者id]
    
    # 启动(该容器必须是系统已经存在的容器)
       doker start [容器的名称或者id]
    
    

    4,删除容器

    # 格式
        docker rm [容器名称|ID]
    
    # 参数
        -f : 强制删除
        docker rm -f [容器名称|ID]
    
    # 清空容器
    docker rm $(docker ps -a -q)
    
    
    # 正在运行的容器需要先停止
    [root@\ docker~]# docker stop sleepy_elgamal
    sleepy_elgamal
    [root@\ docker~]# docker rm sleepy_elgamal
    sleepy_elgamal
    
    

    5,查看容器内容

    # 格式
        docker inspect [容器名称|ID]
    
    # 怎么监控docker运行状态
    docker inspect -f '{{.State.Running}}' nginx
    
    
    [root@\ docker~]# docker inspect -f '{{.State.Running}}' 65a4c1238d69
    true
    

    6、复制命令

    [root@\ docker~]# docker ps
    14c63482dc1d   nginx     "/docker-entrypoint.…"   45 minutes ago   Up 45 minutes   80/tcp                    nginx_store
    
    
    
    
    1、复制到容器内
        docker cp [宿主主机文件路径]  容器ID:容器内路径
    
    [root@\ docker~]# docker cp ./all.tarr 14c63482dc1d:/root/
    
    [root@\ docker~]# docker exec -it 14c63482dc1d bash
    root@14c63482dc1d:/# ls /root/
    all.tarr
    
    
    
    
    
    
    
    
    
    
    2、复制到容器外
        docker cp 容器ID:容器内路径 [宿主主机文件路径]
    
    [root@\ docker~]# docker exec -it 14c63482dc1d bash
    root@14c63482dc1d:/# touch /root/bb.txt
    root@14c63482dc1d:/# exit
    
    [root@\ docker~]# docker cp 14c63482dc1d:/root/bb.txt /opt/
    [root@\ docker~]# ll /opt/
    -rw-r--r-- 1 root root  0 2021-03-22 11:05 bb.txt
    
    
    

    7、进入容器

    1、exec : 在容器外向容器内执行一个命令(官方推荐)
        docker exec [参数] [容器的名称|ID] [cmd]
    
    示例1:
    [root@\ docker~]# docker exec 14c63482dc1d ls /root
    all.tarr
    bb.txt
    
    
    示例2:
    
    终端1:
    [root@\ docker~]# docker run -it centos:7 bash
    [root@aed66b3efd41 /]# ps -ef
    UID         PID   PPID  C STIME TTY          TIME CMD
    root          1      0  0 03:09 pts/0    00:00:00 bash
    root         15      0  0 03:10 pts/1    00:00:00 bash
    root         29      1  0 03:10 pts/0    00:00:00 ps -ef
    
    
    终端2 开启,关闭:
    [root@\ docker~]# docker exec -it aed66b3efd41 bash
    [root@aed66b3efd41 /]# exit
    
    
    再次查看终端1:
    [root@aed66b3efd41 /]# ps -ef
    UID         PID   PPID  C STIME TTY          TIME CMD
    root          1      0  0 03:09 pts/0    00:00:00 bash
    root         30      1  0 03:10 pts/0    00:00:00 ps -ef
    
    
    # 官方推荐,相当于在容器里进行一个进程,退出不影响容器进程
    
    
    
    
    
    
    
    
    2、attach : 在早期docker提供的进入容器的命令(缺点:当其结束时,容器也跟着结束了)
        docker attach [容器ID|名称]
    
    # attach进入容器相当于,直接替代了容器的pid为1的总进程,当多个窗口同时使用该命令 进入该容器时,所有的窗口都会同步显示;同步阻塞同步退出(容器里的所有运行的都会结束)
    
    
    3、nsenter : 建立一个管道连接上容器主ID
        nsenter --target $( docker inspect -f {{.State.Pid}} 30d369d70bcd) --mount --uts --ipc --net --pid
    
    4、ssh : 通过ssh连接
    
    

    相关文章

      网友评论

          本文标题:docker 容器

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