002-容器命令

[TOC]

1. docker命令

1.1 镜像

查看系统中存在的镜像-a 列出所有images(包含历史) lo

docker images 

获取服务器上镜像列表

docker search tutorial 

拉取镜像

docker pull busybox 

删除一个或多个image

docker rmi  

1.2 容器

运行 busybox系统中的hello docker程序

docker run busybox /bin/echo Hello Docker 

使用镜像创建容器

  • -i 标记保证容器STDIN是开启的
  • -t 创建一个客户端创建一个容器,让其中运行 bash 应用,退出后容器关闭
  • --name 创建一个名称centos_aways的容器,自动重启
  • --restart参数:always始终重启;on-failure退出状态非0时重启;默认为,no不重启
docker run -i -t sauloal/ubuntu14.04 
docker run -i -t sauloal/ubuntu14.04 /bin/bash 
docker run -itd --name centos_aways --restart=always centos 

运行docker logs命令来查看job的当前状态:

docker logs $sample_job 或者docker logs -f 容器名

名为sample_job的容器,可以使用以下命令来停止:

docker stop $sample_job 

重新启动该容器:

docker restart $sample_job 

如果要完全移除容器,需要先将该容器停止,然后才能移除

docker stop $sample_jobdocker rm $sample_job 

将容器的状态保存为镜像

docker commit $sample_job job1 
  • 再次启动容器
  • 开启/停止/重启container
  • 再次运行某个container (包括历史container)
docker start/stop/restart  
docker start [container_id] 

进入正在运行的docker容器

docker exec -it [container_id] /bin/bash 

将docker容器中8080端口映射到主机上80端口 ,如果此处不加90,也就是本机端口的映射,docker也同样会随机映射一个本机端口 -d 后台运行

docker run -i -t -p 90:8081 javaweb/centos:0.1 

删除容器#:删除一个或多个container docker

docker rm  

删除所有的container

docker rm 'docker ps -a -q'

同上, 删除所有的container

docker ps -a -q | xargs docker rm 

将主机/data目录挂载到docker容器中/mnt下面

docker run -v /data:/mnt -i -t 980e0e4c79ec /bin/bash 

根据57c312bbaad1创建镜像huangyong/javaweb:0.1

docker commit 57c312bbaad1 huangyong/javaweb:0.1 

进入已经启动的容器中

docker attach 容器名 

访问docker客户端

nc -U /var/run/docker.sock 

查看docker的运行状态

status docker 

service命令管理docker进程start stop statusrestart

service docker stop 

以守护模式运行docker程序

docker -d 

查看docker信息

docker info 

使用h配置启动选项

docker -H 

查看docker开放的端口随机映射到主机上的端口

docker port 容器 端口

创建demo1和demo2的连接,并且在demo2容器中可以通过db的别名进行连接。

docker run -d  -P --name demo2 --link demo1:db 容器名

导出镜像

docker save busybox-1 > /home/save.tar

导入镜像

docker load -i 镜像名称

查看端口

runoob@runoob:~$ docker port bf08b7f2cd89
5000/tcp -> 0.0.0.0:5000

查看容器内部运行进程

runoob@runoob:~$ docker top wizardly_chandrasekhar
UID     PID         PPID          ...       TIME                CMD
root    23245       23228         ...       00:00:00            python app.py

检查docker底层信息

runoob@runoob:~$ docker inspect wizardly_chandrasekhar
[
    {
        "Id": "bf08b7f2cd897b5964943134aa6d373e355c286db9b9885b1f60b6e8f82b2b85",
        "Created": "2018-09-17T01:41:26.174228707Z",
        "Path": "python",
        "Args": [
            "app.py"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 23245,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2018-09-17T01:41:26.494185806Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
......

1.3 容器链接

1.3.1 网络端口映射

我们也可以使用 -p 标识来指定容器端口绑定到主机端口。
两种方式的区别是:
-P :是容器内部端口随机映射到主机的高端口。
-p : 是容器内部端口绑定到指定的主机端口。

unoob@runoob:~$ docker run -d -p 5000:5000 training/webapp python app.py
33e4523d30aaf0258915c368e66e03b49535de0ef20317d3f639d40222ba6bc0

runoob@runoob:~$ docker ps
CONTAINER ID        IMAGE               COMMAND           ...           PORTS                     NAMES
33e4523d30aa        training/webapp     "python app.py"   ...   0.0.0.0:5000->5000/tcp    berserk_bartik
fce072cc88ce        training/webapp     "python app.py"   ...   0.0.0.0:32768->5000/tcp   grave_hopper

绑定UDP端口

runoob@runoob:~$ docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
6779686f06f6204579c1d655dd8b2b31e8e809b245a97b2d3a8e35abe9dcd22a
runoob@runoob:~$ docker ps
CONTAINER ID        IMAGE               COMMAND           ...   PORTS                                NAMES
6779686f06f6        training/webapp     "python app.py"   ...   5000/tcp, 127.0.0.1:5000->5000/udp   drunk_visvesvaraya
95c6ceef88ca        training/webapp     "python app.py"   ...    5000/tcp, 127.0.0.1:5001->5000/tcp   adoring_stonebraker
33e4523d30aa        training/webapp     "python app.py"   ...     0.0.0.0:5000->5000/tcp               berserk_bartik
fce072cc88ce        training/webapp     "python app.py"   ...    0.0.0.0:32768->5000/tcp              grave_hopper

快速查看端口绑定情况

runoob@runoob:~$ docker port adoring_stonebraker 5000
127.0.0.1:5001

1.3.2 Docker 容器互联

新建网络

参数说明:

  • -d:参数指定 Docker 网络类型,有 bridge、overlay。
    其中 overlay 网络类型用于 Swarm mode,在本小节中你可以忽略它。
$ docker network create -d bridge test-net

连接容器

$ docker run -itd --name test1 --network test-net ubuntu /bin/bash

查看网络

docker network ps

1.3.3 配置DNS

我们可以在宿主机的 /etc/docker/daemon.json

文件中增加以下内容来设置全部容器的 DNS:

设置后,启动容器的 DNS 会自动配置为 114.114.114.114 和 8.8.8.8。
配置完,需要重启 docker 才能生效。

查看容器的 DNS 是否生效可以使用以下命令,它会输出容器的 DNS 信息:

{
  "dns" : [
    "114.114.114.114",
    "8.8.8.8"
  ]
}

查看DNS

$ docker run -it --rm ubuntu  cat etc/resolv.conf

如果只想在指定的容器设置 DNS,则可以使用以下命令:

参数说明:

  • -h HOSTNAME 或者 --hostname=HOSTNAME: 设定容器的主机名,它会被写到容器内的 /etc/hostname 和 /etc/hosts。
  • --dns=IP_ADDRESS: 添加 DNS 服务器到容器的 /etc/resolv.conf 中,让容器用这个服务器来解析所有不在 /etc/hosts 中的主机名。
  • --dns-search=DOMAIN: 设定容器的搜索域,当设定搜索域为 .example.com 时,在搜索一个名为 host 的主机时,DNS 不仅搜索 host,还会搜索 host.example.com。
$ docker run -it --rm host_ubuntu  --dns=114.114.114.114 --dns-search=test.com ubuntu

2.K8S命令

2.1 Namespace

查询指定命名空间

kubectl get pods --namespace=development
kubectl describe pod tomcat-weixin-1508772460-9s1dk --namespace=ec-prod-app

查看命名空间描述

kubectl describe ns  XXX

2.2 Service

查看service

kubectl get service --all-namespaces

2.3 Pod

获得哦命名空间下所有pod,包含宿主机IP

kubectl get pod --all-namespaces -o wide

查看pod描述

kubectl describe po  XXX

根据yaml文件删除pod

kubectl delete -f bjyd-dp-wls-dev.yaml

根据yaml文件创建pod

kubectl create -f bjyd-dp-wls-dev.yaml

更新pod

kubectl replace /path/ to/ my- pod. yaml

2.4 扩所容

扩/缩容

kubectl scale rc redis-slave --replicas=3

根据yaml文件扩容

kubectl scale --replicas=3 -f bjyd-dp-wls-dev.yaml

查询pod event

kubectl get event

2.5 日志

查询容器日志

$ kubectl create -f log- pod. yaml pod "log- pod" created
Pod 创建 成功 后, 会 重新 创建 异常 退出 的 容器 container2:

$ kubectl get pod log- pod NAME READY STATUS RESTARTS AGE log- pod 0/ 2 Error 1 19s
然后 分别 查询 Pod 中 两个 容器 的 日志:

$ kubectl logs log- pod container1
container1: 2015- 11- 21 14: 52: 55. 622701243+ 00: 00

$ kubectl logs log- pod container2
Pod "log-pod" in namespace "default": container "container2" is in waiting state.

Kubernetes 创建 Service 的 同时, 会 自动 创建 跟 Service 同名 的 Endpoints:

$ kubectl get endpoints my- nginx -o yaml

你可能感兴趣的:(002-容器命令)