docker 常用操作

下面的命令加上括号的是新版本的命令,去掉括号是老版本的命令。

在任何命令后加:--help,就会提示处这些命令的具体用法与参数。

docker命令 命令解释说明
docker search search the docker hub for images
docker (image) pull pull an images or a repository from a registry
docker images/docker image ls list images
docker create create a new container
docker (container) start start one or more stopped contrainers
docker (container) run run a command in a new container
docker attach attach to a running container
docker ps/docker container ls list contrains
docker (container) logs fetch tho logs of a container
docker restart restart a container
docker (container) stop stop one or more running containers
docker kill kill one or more running containers
docker (image) rm remove one or more image
docker network ls 查看docker使用的网卡
docker inspect Return low-level information on Docker objects。查看某个运行中的contain的详细信息(里面有IP地址),参数是contain的名字(启动container时用--name选项指定的名字),也可以是image ID。

container里面运行的进程一定不能设置成是后台运行,如果是后台运行的话,container会立即自动终止。所以nginx container的话,里面启动nginx的命令一定有【-g】选项。

  • docker search:查找docker,比如查找nginx

    在dockerhub网站上搜索nginx,在【TAG】标签里发现有很多版本。官方nigix docker里面装的操作系统好像是ubuntu,所以你下载的nginx的docker image里就有一个ubuntu系统,这个系统里好像除了nginx必要的依赖工具外,什么都没有装,但是也的40多M。

    在众多版本里有一种的size最小是xxx-alpine,Alpine也是一个Linux的发行版,特定是体积小,nginx的alpine版本的size是8M左右。

    由于docker hub里的镜像都没有安装调试工具,所以,在真正的项目上,一般都是安装好调试工具,自己打包,做出一个image,然后上传的自己的私有docker hub上。

  • docker (image) pull:从docker hub上拉一个alpine系统下的稳定版本的nginx到本地

    # docker image pull nginx:stable-alpine
    
  • docker images/docker image ls:查看本地安装了哪些的docker镜像

    [root@localhost yum.repos.d]# docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    nginx               stable-alpine       aaad4724567b        5 weeks ago         21.2MB
    
  • docker image rm:删除一个镜像文件。

  • docker (container) run:如果本地没有镜像文件,则会自动到仓库里下载。

    $ docker container run --help
    Usage:  docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]
    

    OPTIONS

    需求1:如果要想和docker container交互,必须指定-t-i

    • -t:指定终端。
    • -i:标识可以和docker container交互

    需求2:给要启动的docker contain一个名字。

    • --name:起名字。

    需求3:让启动的container在后台运行(不占用当前shell进程)。

    • -d: Run container in background and print container ID

    需求4:当容器被停止stop后,想自动删除这个容器,达到docker container ls -a的结果里,没有这个容器的效果。

    • --rm: 自动删除容器

      例子:启动nginx

      docker container run --name n12 --rm -d nginx:stable-alpine
      

      sudo docker container ls查看的结果如下,

      CONTAINER ID     IMAGE                 COMMAND                  PORTS    NAMES
      6e63af9a4300     nginx:stable-alpine   "nginx -g 'daemon of…"   80/tcp   n12
      
      • PORTS:nginx使用的端口和网络层协议的种类(这里是使用TCP协议)。
  • docker network ls:查看docker使用的网卡。有下面3个就OK。

    [root@localhost yum.repos.d]# docker network ls
    NETWORK ID          NAME                DRIVER              SCOPE
    d410575399eb        bridge              bridge              local
    a36f938bc6c6        host                host                local
    55ee9a442ee8        none                null                local
    

    安装完docker后,使用ifconfig,可以发现多出个docker0网卡,IP是172.17.0.1。这个网卡的连接方式是【NAT bridge】,既不是【NAT】,也不是【bridge】。container里的进程要想和外网通信的话,要通过别的网卡(enp0s3)才可以。

    docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
            inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
            ether 02:42:5b:c3:2c:80  txqueuelen 0  (Ethernet)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 0  bytes 0 (0.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.65.81  netmask 255.255.255.0  broadcast 192.168.65.255
    
    

    container启动后,里面操作系统的网段就是172.17的

    例子:启动busybox

    # docker container run --name b1111 -it busybox
    

    然后在busybox里面运行ifconfig命令,发现ip地址是172.17.0.2,和网卡docker0在同一个网段。

    然后再运行:docker container ls,就可以看到在names的地方是b1111。

    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    f0f38cba6c5b        busybox             "sh"                5 minutes ago       Up 5 minutes                            b1111
    
    • CONTAINER ID:一个ID
    • IMAGE:哪个image
    • COMMAN:当前镜像里运行的是什么进程
  • docker container start:启动container

    Usage:  docker container start [OPTIONS] CONTAINER [CONTAINER...]
    
    Start one or more stopped containers
    
    Options:
      -a, --attach                  Attach STDOUT/STDERR and forward signals
          --checkpoint string       Restore from this checkpoint
          --checkpoint-dir string   Use a custom checkpoint storage directory
          --detach-keys string      Override the key sequence for detaching a container
      -i, --interactive             Attach container's STDIN
    
  • docker container stop:停止container

  • docker container rm :删除container,参数是container的名字。删除后用docker container ls -a也看不到这个container。如果是stop一个container,那么用docker container ls -a还是可以看到这个container的。

  • docker (container) logs:查看container中进程产生的日志内容。比如查看nginx的日志。然后把日志直接输出到控制台。

    # docker container logs n12
    172.17.0.1 - - [30/Nov/2019:08:52:19 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"
    
    
  • docker container exec:直接执行container里的命令。

    Usage:  docker container exec [OPTIONS] CONTAINER COMMAND [ARG...]
    
    Run a command in a running container
    
    Options:
      -d, --detach               Detached mode: run command in the background
          --detach-keys string   Override the key sequence for detaching a container
      -e, --env list             Set environment variables
      -i, --interactive          Keep STDIN open even if not attached
          --privileged           Give extended privileges to the command
      -t, --tty                  Allocate a pseudo-TTY
      -u, --user string          Username or UID (format: <name|uid>[:<group|gid>])
      -w, --workdir string       Working directory inside the container
    
    # docker container exec -it kv1 /bin/sh
    

docker container状态转换图:

  • docker inspect :后面接container id后者image id。查看详细信息,比如image启动后,运行哪个命令。

下面的nginx的cmd和OS

"Cmd": [
              "nginx",
              "-g",
              "daemon off;"
          ],
"Os": "linux",

【daemon off】是让nginx不作为守护进程运行,要是作为守护进程运行的话,container会自动结束。

c/c++ 学习互助QQ群:877684253

本人微信:xiaoshitou5854

posted @ 2019-11-30 17:22  小石王  阅读(374)  评论(0编辑  收藏  举报