windows、mac os、linux,三大系统之间有什么区别?

2020-12-24 08:27

阅读:670

  1. 查看容器
    正在运行的容器

    docker ps
    

    所有容器

    docker ps -a
    
    [root@localhost ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
    aa36de1a05f3        centos:latest       "bash"              7 minutes ago       Exited (0) 6 minutes ago                       elated_williams
    
  2. 查看容器
    基于现有的镜像,可以使用如下的命令,启动自己的容器。

    docker run [镜像][参数...]
    

    可以执行的参数有

    -i:表示运行容器
    -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。一般都是-it一起使用。
    --name:为创建的容器命名。
    -v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,可以共享到容器上。
    -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
    -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射

    (1) 交互式容器
    以交互式方式创建并启动容器,启动完成后,直接进入当前容器。可使用exit命令退出容器。需要注意以此种方式启动容器,如果退出容器,则容器会进入停止状态。

    docker run -it --name=mycentos centos /bin/bash
    

    创建并启动名称为"mycentos"的交互式容器;上面指令中的镜像名称centos 也可以使用镜像id

    [root@localhost ~]# docker run -it --name=mycentos centos /bin/bash
    [root@26c41dc277b7 /]# ls -a 
    .  ..  .dockerenv  bin	dev  etc  home	lib  lib64  lost+found	media  mnt  opt  proc  root  run  sbin	srv  sys  tmp  usr  var
    

    创建成功,并且已经进入了容器内部。注意看root后面的地址已经变成了26c41dc277b7了。

    (2) 守护式容器
    创建一个守护式容器;如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器。命令如下(容器名称不能重复)

    docker run -di --name=mycentos2 centos
    
    [root@localhost ~]# docker run -di --name=mycentos2 centos
    640fac3bbf082e6a17cea153f49ae373f15ddf815cf1a813d7e29d9027560713
    [root@localhost ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    640fac3bbf08        centos              "/bin/bash"         6 seconds ago       Up 5 seconds                            mycentos2
    

    命令行输出了容器ID,证明创建成功了。使用docker ps查看正在运行的命令,能看到自己正在运行的命令。

    需要登录进入该容器的话,可以使用下面的命令

    docker exec -it [容器名] /bin/bash
    

    [容器名]:容器名称或者容器ID都是可以的。退出的话,使用exit

    [root@localhost ~]# docker exec -it mycentos2 /bin/bash
    [root@640fac3bbf08 /]# ls -a 
    .  ..  .dockerenv  bin	dev  etc  home	lib  lib64  lost+found	media  mnt  opt  proc  root  run  sbin	srv  sys  tmp  usr  var
    
  3. 停止或启动容器
    停止容器

    docker stop mycentos
    

    启动容器

    docker start mycentos
    
    [root@localhost ~]# docker stop mycentos2
    mycentos2
    [root@localhost ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    [root@localhost ~]# docker start mycentos2
    mycentos2
    [root@localhost ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    640fac3bbf08        centos              "/bin/bash"         8 minutes ago       Up 3 seconds                            mycentos2
    
  4. 删除容器
    删除指定容器

    docker rm mycentos3
    

    删除全部容器

    docker rm $(docker ps -aq)
    

    停用并删除所有容器

    docker stop $(docker ps -q) & docker rm $(docker ps -aq)
    
    [root@localhost ~]# docker rm mycentos3
    Error response from daemon: You cannot remove a running container 1627ee165666780a98e48a8f0faaa13009264fafd373d60c783d20bed18ba36e. Stop the container before attempting removal or use -f
    [root@localhost ~]# docker stop mycentos3
    mycentos3
    [root@localhost ~]# docker rm mycentos3
    mycentos3
    

    如果容器在运行,必须将其停止后,才能删除。或者加-f强制删除

  5. 文件拷贝
    (1) 将宿主机中的文件拷贝到容器内
    拷贝当前目录的abc.txt文件,拷贝到容器的根目录

    docker cp abc.txt mycentos2:/
    
    [root@localhost ~]# docker cp abc.txt mycentos2:/
    [root@localhost ~]# docker exec -it mycentos2 /bin/bash
    [root@640fac3bbf08 /]# ls -a 
    .  ..  .dockerenv  abc.txt  bin  dev  etc  home  lib  lib64  lost+found  media	mnt  opt  proc	root  run  sbin  srv  sys  tmp	usr  var
    

    拷贝完成后,使用docker exec进入目标容器,能看到自己的文件。

    (2) 将文件从容器内拷贝到宿主机
    使用exit退出容器,在宿主机内部操作,只需要把上面的地址对调就行了

    docker cp mycentos2:/def.txt /root
    
    [root@localhost ~]# docker cp mycentos2:/def.txt /root
    [root@localhost ~]# ls -a 
    .   abc.txt          .bash_history  .bash_profile  .cshrc   .pki     test.txt
    ..  anaconda-ks.cfg  .bash_logout   .bashrc        def.txt  .tcshrc  .viminfo
    
  6. 目录挂载
    在创建容器的时候,可以将宿主机的目录与容器内的目录进行映射。这样我们就可以通过修改宿主机某个目录的文件从而去影响容器内的目录。创建容器时添加-v参数,后边为[宿主机目录]:[容器目录]
    我在/usr/local创建了一个test目录,路径:/usr/local/test

    docker run -di -v /usr/local/test:/usr/local/test --name=mycentos3 centos
    
    [root@localhost ~]# docker run -di -v /usr/local/test:/usr/local/test --name=mycentos3 centos
    1627ee165666780a98e48a8f0faaa13009264fafd373d60c783d20bed18ba36e
    [root@localhost ~]# touch /usr/local/test/def.txt
    [root@localhost ~]# docker exec -it mycentos3 /bin/bash
    [root@1627ee165666 /]# ls /usr/local/test
    def.txt
    

    容器创建成功后,在宿主机创建了def.txt文件,使用docker exec登录进去虚拟机后,能正常查看到该文件。

  7. 查看容器ip

    docker inspect mycentos2
    
    [root@localhost ~]# docker inspect mycentos2
    [
        {
            ...
            "NetworkSettings": {
            	...
                "Gateway": "172.17.0.1",
                "GlobalIPv6Address": "",
                "GlobalIPv6PrefixLen": 0,
                "IPAddress": "172.17.0.2",
                "IPPrefixLen": 16,
                "IPv6Gateway": "",
                "MacAddress": "02:42:ac:11:00:02",
                ...
            }
        }
    ]
    

    内容有点多,这里做精简。NetworkSettings下的IPAddress就是ip地址。

  8. 端口映射
    使用-p进行端口映射。语法是:

    docker run -d -p [物理机端口]:[容器端口] centos:httpd
    

    实例

    [root@localhost ~]# docker run -d -p 80:80 centos:httpd
    9e003c5ce2e91d6023347d09aaa2d46cd4dd3cf73b869966fa67d45be24b492b
    


评论


亲,登录后才可以留言!