Docker基础命令使用

Docker基础命令使用

部署Docker虚拟化平台内核要求:Linux内核版本:3.8+,推荐内核版本3.10+,对应的Linux发行版:RHEL7.x和CentOS7.x;

部署Docker虚拟化技术,对物理机配置容量没有要求,生产环境尽量使用高配物理机。如:京东线上,64C(CPU)+256G(内存)+2T(分布式部署),JDOS2.0弹性云。

Docker的安装与配置

部署环境:

OS:RedHat7.3

  1. 下载安装Docker软件包

    [root@docker mnt]# yum install docker*
    。。。
    Installing:
     docker-engine          x86_64 1.13.1-1.el7.centos /docker-engine-1.13.1-1.el7.centos.x86_64
                                                                               65 M
     docker-engine-selinux  noarch 1.13.1-1.el7.centos /docker-engine-selinux-1.13.1-1.el7.centos.noarch
                                                                               43 k
    Installing for dependencies:
     audit-libs-python      x86_64 2.6.5-3.el7         rhel7.3                 70 k
     checkpolicy            x86_64 2.5-4.el7           rhel7.3                290 k
     libcgroup              x86_64 0.41-11.el7         rhel7.3                 65 k
     libseccomp             x86_64 2.3.1-2.el7         rhel7.3                 56 k
     libsemanage-python     x86_64 2.5-4.el7           rhel7.3                103 k
     libtool-ltdl           x86_64 2.4.2-21.el7_2      rhel7.3                 49 k
     policycoreutils-python x86_64 2.5-8.el7           rhel7.3                444 k
     python-IPy             noarch 0.75-6.el7          rhel7.3                 32 k
     setools-libs           x86_64 3.3.8-1.1.el7       rhel7.3                610 k
    。。。
    
    [root@docker mnt]# rpm -qa | grep docker
    docker-engine-1.13.1-1.el7.centos.x86_64
    docker-engine-selinux-1.13.1-1.el7.centos.noarch

  2. 启动Docker

    
    [root@docker mnt]# systemctl start docker
    [root@docker mnt]# ps -ax | grep docker
    11435 ?        Ssl    0:00 /usr/bin/dockerd
    11438 ?        Ssl    0:00 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --shim docker-containerd-shim --runtime docker-runc
    11544 pts/0    R+     0:00 grep --color=auto docker
    
    [root@docker mnt]# docker version
    Client:
     Version:      1.13.1
     API version:  1.26
     Go version:   go1.7.5
     Git commit:   092cba3
     Built:        Wed Feb  8 06:38:28 2017
     OS/Arch:      linux/amd64
    
    Server:
     Version:      1.13.1
     API version:  1.26 (minimum version 1.12)
     Go version:   go1.7.5
     Git commit:   092cba3
     Built:        Wed Feb  8 06:38:28 2017
     OS/Arch:      linux/amd64
     Experimental: false
    

  3. 基于Docker引擎启动Nginx容器,并且实现通过物理机wget、curl实现访问

    首先,需要从Docker官网获取Docker镜像,docker search nginx | more

    
    docker search nginx | more
    docker pull docker.io/nginx

    由于国外网站下载速度比较慢,所以可以替换为国内的docker仓库,具体方法:

    
    [root@docker ~]# cat >/etc/docker/daemon.json << EOF
    {
    "registry-mirrors": ["https://registry.docker-cn.com"]
    }
    EOF
    [root@docker ~]# cat /etc/docker/daemon.json 
    {
    "registry-mirrors": ["https://registry.docker-cn.com"]
    }
    重启Docker服务,这样就可以取下载Docker镜像了

    为什么要为Docker配置国内镜像???在正常情况下,docker有一个默认连接的国外官方镜像,在国外的网友访问该官方镜像自然不成问题,但是国内毕竟不是国外,由于国情不同,中国的网络访问国外官方镜像网速一向很慢,而且往往还会遭遇断网的窘境,所以说我们要想正常使用docker的镜像,那么我们就不得不配置相应的国内镜像。

    Docker可以配置的国内镜像有很多可供选择,比如说:阿里云,网易蜂巢,DaoCloud,Docker中国区官方镜像等,这些都是可以提供给大家随意选择的不错的镜像仓库。

Docker容器的基本操作

将本地tar包载入到本地镜像库使用docker load命令


[root@localhost packages]# docker load --input ubuntu.tar 
454970bd163b: Loading layer [==================================================>] 196.8 MB/196.8 MB
38112156678d: Loading layer [==================================================>] 208.9 kB/208.9 kB
4e1f7c524148: Loading layer [==================================================>] 4.608 kB/4.608 kB
56063ad57855: Loading layer [==================================================>] 1.024 kB/1.024 kB
[root@localhost packages]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              07c86167cdc4        2 years ago         188 MB
    

启动容器:

docker run IMAGE COMMAND ARG...

run 在新容器中执行命令

IMAGE 指定的镜像

COMMAND 命令

ARG 参数


[root@localhost packages]# docker run ubuntu echo "hello world"
hello world

一次启动执行一个命令的容器是docker中最基本的运行方式,docker提供了一个交互式启动容器的方式

docker run -i -t IMAGE /bin/bash

-i 为容器始终打开标准输入

-t 为创建的容器的tty终端


[root@localhost packages]# docker run -it ubuntu /bin/bash
root@855833c3672f:/# echo "hello docker"
hello docker
root@855833c3672f:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

查看容器:

docker ps -a [ -l ]

-a 列出所有容器

-l 列出最新创建的容器


[root@localhost packages]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                CREATED              STATUS                          PORTS               NAMES
855833c3672f        ubuntu              "/bin/bash"            45 seconds ago       Exited (0) 10 seconds ago                           flamboyant_rosalind
797239db86e0        ubuntu              "echo 'hello world'"   About a minute ago   Exited (0) About a minute ago                       flamboyant_khorana
77b29f9efa08        b809f199bbb9        "/bin/bash"            6 minutes ago        Created                                             stoic_leavitt

执行结果参数:


[root@localhost packages]# docker ps -a
CONTAINER ID(docker守护进程在启动容器时为容器分配的唯一ID)
IMAGE()     来自的镜像
COMMAND()   执行的命令
CREATED()   创建时间
STATUS()    运行状态
PORTS()     最近一次启动时间
NAMES(docekr守护进程为容器自动分配的名字)

docker inspect查看容器后面添加容器的唯一ID或者NAMES

docker自定义容器名字

docker run --name=vector_name -i -t ubuntu /bin/bash


[root@localhost packages]# docker run --name=fsx_docker -it ubuntu /bin/bash
root@304d46ba1c87:/# exit
exit
[root@localhost packages]# docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
304d46ba1c87        ubuntu              "/bin/bash"         11 seconds ago      Exited (0) 7 seconds ago                       fsx_docker

重新启动已经停止的容器

docker start [-i] vector_name

-i 以交互模式启动

删除容器

docker rm CONTAINER_NAME

rm命令仅仅用来删除的容器,不能删除正在用运行的命令


[root@localhost packages]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS                     PORTS               NAMES
304d46ba1c87        ubuntu              "/bin/bash"            2 minutes ago       Up 39 seconds                                  fsx_docker
855833c3672f        ubuntu              "/bin/bash"            5 minutes ago       Exited (0) 4 minutes ago                       flamboyant_rosalind
797239db86e0        ubuntu              "echo 'hello world'"   5 minutes ago       Exited (0) 5 minutes ago                       flamboyant_khorana
77b29f9efa08        b809f199bbb9        "/bin/bash"            10 minutes ago      Created                                        stoic_leavitt
[root@localhost packages]# docker rm 855833c3672f
855833c3672f
[root@localhost packages]# docker rm 797239db86e0
797239db86e0
[root@localhost packages]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
304d46ba1c87        ubuntu              "/bin/bash"         3 minutes ago       Up About a minute                       fsx_docker
77b29f9efa08        b809f199bbb9        "/bin/bash"         11 minutes ago      Created                                 stoic_leavitt

总结

docker load --input 将本地容器仓库的tar包导入成镜像

docker run -it --name 启动一个新的容器

docker ps -a -l 查看容器

docker inspect 查看具体容器的信息

docker start -i 启动已经存在的容器

docker rm 删除一个容器

Docker守护式容器

我们需要一个长期运行的容器提供服务,这就是守护式容器;可以长期运行

docker run -it IMAGE /bin/bash

ctrl+p ctrl+q


[root@localhost packages]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@localhost packages]# docker run -it --name=fsx1 ubuntu /bin/bash
root@dcbb80e0404b:/# [root@localhost packages]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
dcbb80e0404b        ubuntu              "/bin/bash"         26 seconds ago      Up 25 seconds                           fsx1
//注意:此时的容器仍是启动状态,就意味着它还在运行

再次进入已经退出(仍在启动中)的容器:我们称之为:(附加到运行中的容器)

docker attach docker_name


[root@localhost packages]# docker attach fsx1
root@dcbb80e0404b:/# 

启动守护式容器

docker run -d IMAGE COMMAND ARG...

-d 在启动容器时,使用后台

这是启动守护式容器最重要的命令


[root@localhost packages]# docker run --name=fsx2 -d ubuntu /bin/bash -c "while true;do echo hello;sleep 1;done"
529cea9c4075854083e1d025f5639055a8cde98d17fe4d6d74a208215d706427
[root@localhost packages]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
529cea9c4075        ubuntu              "/bin/bash -c 'whi..."   5 seconds ago       Up 3 seconds                            fsx2
//容器一直在运行

使用log命令查看容器内部运行状况

docker logs -f -t --tail vector_name

-f 一直跟踪logs,时时更新

-t 在返回结果上加上时间戳

--tail 返回结尾出多少书量的日志,不指定返回全部


[root@localhost packages]# docker logs -f -t --tail 5 fsx2
2018-05-24T03:35:35.642795622Z hello
2018-05-24T03:35:36.643727589Z hello
2018-05-24T03:35:37.644724326Z hello
2018-05-24T03:35:38.645707632Z hello
2018-05-24T03:35:39.646708718Z hello
2018-05-24T03:35:40.647727168Z hello
2018-05-24T03:35:41.648612161Z hello
2018-05-24T03:35:42.649668735Z hello
^C

查看容器内部进程

docker top vector_name


[root@localhost packages]# docker top fsx2
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                11775               11758               0                   11:32               ?                   00:00:00            /bin/bash -c while true;do echo hello;sleep 1;done
root                13142               11775               0                   11:37               ?                   00:00:00            sleep 1

在docker运行中的容器启动新的进程(docker的理念是一个容器运行一个服务):

docker exec -d -i -t vector_name COMMAND ARG...

与run命令相似


[root@localhost packages]# docker exec -it fsx2 /bin/bash
root@529cea9c4075:/# echo hello fsx
hello fsx
root@529cea9c4075:/# [root@localhost packages]# docker top fsx2
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                11775               11758               0                   11:32               ?                   00:00:00            /bin/bash -c while true;do echo hello;sleep 1;done
root                13440               13423               0                   11:40               pts/5               00:00:00            /bin/bash
root                13475               11775               0                   11:40               ?                   00:00:00            sleep 1
//这里使用ctrl+p ctrl+q

停止守护式容器

docker stop vector_name

docker kill vector_name

stop是发送一个信号给容器,等待停止

kill直接停止容器


[root@localhost packages]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
529cea9c4075        ubuntu              "/bin/bash -c 'whi..."   9 minutes ago       Up 9 minutes                            fsx2
dcbb80e0404b        ubuntu              "/bin/bash"              18 minutes ago      Up 18 minutes                           fsx1
[root@localhost packages]# docker stop fsx1
fsx1
[root@localhost packages]# docker kill fsx2
fsx2

总结

ctrl+p ctrl+q 将交互式容器转到后台

docker run -d 创建一个守护式容器

docker logs 查看容器日志

docker top 查看容器内部进程

docker exec 为运行中的容器启动一个新进程

docker stop/kill 停止一个容器

这里只介绍一些常见的docker命令,及子命令使用;更多信息可以使用docker帮助文件

man docker-run(logs、stop、exec...)

你可能感兴趣的:(Docker)