美文网首页
docker笔记(一)

docker笔记(一)

作者: maxZhang | 来源:发表于2018-06-07 14:24 被阅读14次

docker最近很火的容器化部署平台。我们可以把docker中的镜像和容器分别理解成类和对象(类的实例 )。本文的测试环境针对mac,linux上可能会有些许不同。

检查Docker Engine,Docker Compose和Docker Machine的版本

MacBook:~ max$ docker --version
Docker version 18.03.1-ce, build 9ee9f40

MacBook:~ max$ docker-compose --version
docker-compose version 1.21.1, build 5a3f1a3

MacBook:~ max$ docker-machine --version
docker-machine version 0.14.0, build 89b8332

测试docker是否已经部署好,可以使用docker run hello-world命令,如果输出如下内容,说明docker已经部署完毕

MacBook:~ max$ docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/

上述命令实际已经运行了一个镜像为hello-world容器,从上面我们看出docker运行hello-world镜像的过程,
1.docker client先与docker daemon(也就是docker server)建立连接
2.docker daemon从 docker hub pull镜像下来
3.docker daemon根据镜像创建了一个容器,并且产生了output那句"Hello from Docker!"
4.docker daemon把output通过docker client输出的终端上,所以我们看到了,那句输出"Hello from Docker!"
至此,这个容器运行完毕,也就退出了。
docker ps命令查看正在运行的容器,所以我们如果要查看全部的容器,需要用到docker ps -a

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                         PORTS                NAMES
7d0a57302d9b        hello-world         "/hello"                 2 minutes ago       Exited (0) 2 minutes ago                            distracted_mclean

用docker ps -a 命令发现,目前本地只有一个hello-world的镜像,接下来,我们试着在后台运行一个nigix服务看看

docker run -d -p 80:80 --name webserver nginx

默认会从docker hub下载的镜像都是latest镜像,下载完毕后会在后端启用一个端口为80的web服务。
-d :分离模式: 在后台运行
-p (小写) 参数来指定端口映射,也就是docker daemon中的nginx镜像运行的端口指定为80,并且映射到本地电脑的80端口
--name webserver:表示把这个nginx服务命令为webserver
打开浏览器,查看本地启用的web服务,如下



关闭刚才在后台运行web容器服务

docker stop webserver

如果想运行一个容器

docker start 容器名

删除容器,需要注意的是删除容器时,需要确保容器已经停止运行

docker rm 容器id

接下来,pull一个centos镜像下来,试着在 centos中进行相关的操作,如果centos镜像没有的话,需要先把centos镜像下载下来

拉取tag为latest的centos镜像时,tag可以省略成如下命令
docker pull centos
拉取全部的centos镜像,命令为
docker pull centos -a

提示:
如果出现Status: Image is up to date for centos:latest 说明已经存在了镜像centos:latest

我们查看所有的镜像

docker images

删除镜像
如果你执行了docker pull centos -a操作,在查看所有镜像会发现好多centos都被pull下来了,删除镜像用
如果镜像id相同,需要用docker rmi REPOSITORY:TAG 进行操作,否则会报错

docker rmi 镜像id

运行一个容器
运行docker 中的REPOSITORY为centos,TAG为latest镜像运行一个hello world。运行完毕后,我们查看容器docker ps -a,发现刚才运行的容器已经退出

docker run centos:latest /bin/echo 'hello world'
当然tag为latest时,我们可以简写成
docker run centos /bin/echo 'hello world'

CONTAINER ID        IMAGE               COMMAND                      CREATED               STATUS                                   PORTS                NAMES
7d0a57302d9b        hello-world         "/hello"                               19 minutes ago        Exited (0) 19 minutes ago                                   distracted_mclean
b349c90cd93d        nginx                   "nginx -g 'daemon of…"    44 minutes ago        Exited (0) 43 minutes ago                                  friendly_mahavira
99ecd2d1ec3b        centos:latest       "/bin/echo 'Hello wo…"      About an hour ago   Exited (0) About 1 minutes ago                         sandly_adesa

获取容器的pid

docker inspect --format "{{.State.pid}}" webserver

进入容器

nsenter --target 32439 --mount --uts --ipc --net --pid

默认运行一个容器时,系统会指定一个容器的名字名字,如果需要以特定名字启动一个容器,可以运行

docker run --name mycentos centos /bin/echo 'hello-w'

运行一个指定名字的容器,并且进入对应的容器中
-it实际上时-i和-t的参数的缩写,-i是让容器的终端打开,以便输入东西。-t是开一个伪终端绑定到我们当前的终端上

docker run --name mydocker -it centos /bin/bash

这样,我们就进入了centos容器里面了,新打开一个终端,输入docker ps可以看到正在运行的名为mydocker的centos容器

MacBook:~ max$ docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
284a76eeb573        centos              "/bin/bash"         About an hour ago   Up About an hour                        mydocker
MacBook:~ max$

下面的操作在centos容器内部操作了哦
表示查看当前的目录
ls /

[root@284a76eeb573 /]# ls /
bin  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

查看当前的进程
ps aux

[root@284a76eeb573 /]# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1  11828  2908 pts/0    Ss   06:01   0:00 /bin/bash
root        14  0.0  0.1  51716  3364 pts/0    R+   06:24   0:00 ps aux

相关文章

网友评论

      本文标题:docker笔记(一)

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