启动命令
systemctl start docker #启动
systemctl enable docker #设置开机自启动
基本命令
docker search centos #搜索镜像
docker pull docker.io/ansible/centos7-ansible #根据需求拉取镜像
for i in `docker search centos|awk '!/NAME/{print $2}'`;do docker pull $i;done #拉去search到的全部镜像
docker images #查看本地镜像
容器操作:
docker create # 创建一个容器但是不启动它
docker run -d -p 端口:映射端口# 创建并启动一个容器 -d 是后台启动,-p 自定义的端口:默认端口
注意:通过docker run 启动容器如果没有加后台启动的话,退出后容器就死了,可以通过快捷键ctrl+p+q,退出后容器依然存活
docker stop # 停止容器运行,发送信号SIGTERM
docker start # 启动一个停止状态的容器
docker restart # 重启一个容器
docker rm # 删除一个容器
docker kill # 发送信号给容器,默认SIGKILL
docker attach # 连接(进入)到一个正在运行的容器
docker wait # 阻塞一个容器,直到容器停止运行
docker login -u xxx -p xxx #登陆镜像仓库
获取容器信息:
docker ps # 显示状态为运行(Up)的容器
docker ps -a # 显示所有容器,包括运行中(Up)的和退出的(Exited)
docker inspect # 深入容器内部获取容器所有信息
docker logs # 查看容器的日志(stdout/stderr)
docker events # 得到docker服务器的实时的事件
docker port # 显示容器的端口映射
docker top # 显示容器的进程信息
docker diff # 显示容器文件系统的前后变化
导出容器:
docker cp 容器id:/xxx/xxxx xxx/xxx# 从容器里向外拷贝文件或目录
docker export # 将容器整个文件系统导出为一个tar包,不带layers、tag等信息
执行:
docker exec # 在容器里执行一个命令,可以执行bash进入交互式
docker container exec -it 40b23358a1bc /bin/bash
镜像操作:
docker images # 显示本地所有的镜像列表
docker import # 从一个tar包创建一个镜像,往往和export结合使用
docker build # 使用Dockerfile创建镜像(推荐)
docker commit -p 容器名|容器id # 从容器创建镜像
docker rmi # 删除一个镜像
docker load -i xxx.gz # 从一个tar包创建一个镜像,和save配合使用
docker save -o xxx.gz 镜像名:版本号 # 将一个镜像保存为一个tar包,带layers和tag信息
docker history # 显示生成一个镜像的历史命令
docker tag 容器id tag名 # 为镜像起一个别名
镜像仓库(registry)操作:
docker login # 登录到一个registry
docker search # 从registry仓库搜索镜像
docker pull # 从仓库下载镜像到本地
docker push # 将一个镜像push到registry仓库中
运行并进入容器操作:
docker run -i -t docker.io/1832990/centos6.5 /bin/bash
-t 表示在新容器内指定一个伪终端或终端;
-i表示允许我们对容器内的 (STDIN) 进行交互;
-d表示将容器在后台运行;
/bin/bash 。这将在容器内启动 bash shell;
在容器中安装软件
# 先搜索软件创库
apt-get update
# 然后通过apt-get 命令安装软件
apt-get install vim
centos
内核版本 uname -a | -r
使用Dockerfile构建Docker镜像
以微服务jar包为例构建成docker镜像
1:将jar包上传到linux服务器/app/eureka目录为例,在jar包所在的目录创建名为DockerFile的wenjian
2:在Dockerfiler中添加以下内容
# 基于的那个镜像
From java:8
# 将本地文件夹挂载到当前容器
VOLUME /tmp
# 复制文件到容器
ADD 可运行的jar /app.jar(给jar包取个别名)
# 声明需要暴露的端口
EXPOSE 8761
# 配置容器启动后执行的命令
ENTRYPOINT["jar","-jar","/app.jar"]
3:使用docker build命令构建镜像
# docker build -t microservice-eureka-server.0.0.1 .
docker build -t 镜像名称:标签 在dockerfile的相对位置
修改已有镜像
# 先搜索软件创库
apt-get update
# 然后通过apt-get 命令安装软件
apt-get install vim
# 当结束后,我们使用 exit 来退出,现在我们的容器已经被我们改变了,使用 docker commit 命令来提交更新后的副本。
docker commit -m "Added json gem" -a "Docker Newbee" 0b2616b0e5a8 ouruser/sinatra:v2
# 其中,-m 来指定提交的说明信息,跟我们使用的版本控制工具一样;-a 可以指定更新的用户信息;之后是用来创建镜像的容器的 ID;最后指定目标镜像的仓库名和 tag 信息。创建成功后会返回这个镜像的 ID 信息。
使用 docker images 来查看新创建的镜像。
存储卷
在容器中使用volumes
docker run -it --name bbox1 -v /data/app(本地路径) /data/app(容器中的路径) #docker 管理存储卷
docker run -it -v HOSTDIR:VOLUMEDIR --name bbox2 busybox #绑定挂在卷,从宿主机绑定到容器中
docker inspect -f {{.Mounts}} bbox1 #查看bbox1容器的卷、卷标识符及挂载的主机目录
多个容器的卷使用同一个主机目录
docker run -it --name c1 -v /docker volume/v1:/data busybox
docker run -it --name c2 -v /docker volume/v1:/data busybox
复制使用其他容器的卷,为docker run 命令使用--volume-from选项
docker run -it --name bbox1 -v /docker/volumes/v1:/data busybox
docker run -it --name bbox2 --volume-from bbox1 busybox
DockerFile详解
# Description:test image
FROM busybox:latest
# 注释 标明作者以及联系
MAINTAINER "author <xxx@xxx.com"
# LABEL maintainer="author <xxx@xxx.com"
# 复制单个文件
COPY index.html /data/web/html
# 复制文件夹(在目标目录中需要把复制的文件夹名给写上),如果源有多个 ,目标一定是目录
COPY data opt/data/
# ADD 命令类似于copy指令,ADD支持使用TAR文件和URL路径
ADD http://xxx.xxx.gz /usr/local/src/ # 此时会将gz文件下载只目标位文件夹中
ADD nginx-1.15.2.tar.gz.gz /usr/local/src/ #此时会将gz文件展开至目标问价中
# WORKDIR 用于为Dockerfile中所有的RUN,CMD,ENTRYPOINT,COPY和ADD指定设定工作目录
WORKDIR /usr/local/src/
ADD nginx-1.15.2.tar.gz ./ #会添加到WORKDIR指定的目录当中
# VOLUME 用于在image中创建一个挂载点目录,以挂载Docker host上的卷或其他容器上的卷,如果挂载点目录路径在此前文件存在,docker run命令会在卷挂载完成后将此前的所有文件复制到新挂载的卷中
VOLUME /data/mysql
# EXPOSE 用于为容器打开指定要监听的端口以实现与外部通信
# EXPOSE <port>[/<protocol>] # <protocol>用于指定传输层协议,可为tcp或udp二者之一,默认为tcp协议
EXPOSE 11211/udp 80/tcp
#ENV 用于为镜像定义所需的环境变量,并可被Dockerfile文件中位于其后的其他指令(如ENV,ADD,COPY等)所调用
#调用格式为$variable_name或${variable_name}
#ENV <key> <value>或者ENV <key>=<value>... 当赋多个变量时,空格要用转义符
#ENV DOC_ROOT /data/web
ENV DOC_ROOT=/data/web \
DOC_DIR=/data/
COPY index.html $DOC_ROOT #直接引用环境变量中定义的变量
COPY index.html ${DOC_ROOT:-/data/web} #引用环境变量中的定义的变量如果没有定义的话,给添加默认值
# RUN 与 CMD 运行的时间点
# RUN 运行在docker build 时期,RUN指令运行于映像文件构建过程中
# CMD 运行在docker run 时期,CMD指令运行于基于Dockerfile构建出的新映像文件启动一个容器时,CMD指令的首要目的在于启动容器指定默认要运行的程序,其运行结束后,容器也将终止,在Dockerfile中可以存在多个CMD指令,但仅最后一个会生效
kubernetes
Pod是Kubernetes对象模型中能够创建或部署的最小并且是最简单的基本单元。一个Pod代表在集群中正在运行的一个进程。这些容器共享存储、网络和命名空间,以及如何运行的规范。
kebectl get cs/componentstatus #检查集群状态
kubectl get nodes #获取节点信息
kubectl get pods -n xxx(名称空间) -o wide #获取当前节点所有的pods
kubectl get ns #获取名称空间
kubectl describe node nodename(节点名称) #查看节点信息
kubectl version #查看版本
kubectl cluster-info #查看集群信息
kubectl run --help #查看run的帮助文档
kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool][--overrides=inline-json] [--command] -- [COMMAND] [args...] [options] #run命令的参数以及选项
kubectl get deployment #查看当前系统被创建的
kubectl get pods containerid -o yaml #查看容器的配置信息
kubectl create -f pod-demo.yaml #根据配合文件创建,在一个pod里面创建多个容器
kubectl describe pods pod-demo #查看pod资源信息
kubectl delete -f pod-damo.yaml #删除创建的yaml pods
kubectl get pods -w #监控pods创建的过程
kubectl exec -it pods -c container -- /bin/sh #进入到pod中的容器