[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