Dokcer的一些命令:
启动Docker:systemctl start docker
重启Docker:systemctl restart docker
查看Docker版本:docker version
查看docker系统信息:docker info
运行Hello-world映像:docker run hello-world
在容器内运行一个应用程序并输出hello world:docker run ubuntu:15.10 /bin/bash “Hello world” 注:Hello world不能加!
运行交互式的容器:docker run -i -t ubuntu:15.10 /bin/bash
cat /proc/version 查看当前系统的版本信息
ls 查看当前目录下的文件列表
exit或者ctrl + d 退出容器
创建一个以进程方式运行的容器:docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
查看是否有容器在运行: docker ps 或者 docker container ps 或者 docker container ls
查看所有的容器:docker ps –a
查看最后一次创建的容器:docker ps -l
停止容器:docker stop 容器ID或容器名称
启动一个已停止的容器: docker start 容器ID
重启容器:docker restart容器ID
拉取镜像(比如ubuntu):docker pull ubuntu
启动容器:docker run –it Ubuntu /bin/bash
后台运行容器:docker run -itd --name ubuntu-test ubuntu /bin/bash
加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec
-i交互式操作
-t在新容器内指定一个伪终端或终端
进入容器:docker attach 容器ID 不推荐,exit后容器就会停止
docker exec –it 容器ID /bin/bash 推荐,exit后容器不会停止
导出容器:docker export 容器ID > 目录/文件名
导入容器快照:cat ubuntu.tar | docker import – test/ubuntu:vl 也可通过URL或某个目录来导入
删除容器:docker rm –f 容器ID -f是强制删除
清除所有处于停止状态的容器:docker container prune
使用docker构建一个web应用程序(在docker容器中运行一个python flask应用来运行一个web应用):
载入镜像:docker pull training/webapp
运行容器:docker run –d –P training/webapp python app.py
-P:将容器内部使用的网络端口映射到我们使用的主机上
设置端口-p:docker run –d –p 5000:5000 training/webapp python app.py
指定容器绑定的网络地址:docker run –d –p 127.0.0.1:5001:5000 training/webapp python app.py
查看容器端口映射:docker port 容器ID或name
查看容器的运行日志: docker logs –f 容器ID或name -f作用是像tail –f一样来输出
查看容器内部运行的进程:docker top 容器ID或name
实时显示每个容器资源使用情况:docker stats (Docker自带的监控命令:ps top stats)
查看容器的底层信息(配置和状态信息):docker inspect 容器ID或name
列出镜像列表:docker images 运行容器时,不指定镜像的版本标签,将默认使用latest镜像
获取一个新的镜像:docker pull 镜像Repository:TAG(即镜像仓库源:标签)
查找镜像:docker search 镜像name(即镜像仓库源名称)
拖取镜像:docker pull 镜像name
使用镜像:docker run 镜像name
删除镜像:docker rmi 镜像name 如果有容器在引用镜像,则无法删除
创建镜像:
更新镜像:docker commit -m="has update" -a="lisa" d9ce06049ea5 spring/ubuntu:v2
创建一个新的镜像:新建Dockerfile 文件,内容如下
FROM centos:6.7
MAINTAINER Fisher "fisher@sudops.com"
RUN /bin/echo 'root:123456' |chpasswd
RUN useradd runoob
RUN /bin/echo 'runoob:123456' |chpasswd
RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE 22
EXPOSE 80
CMD /usr/sbin/sshd -D
构建镜像:docker bulid –t 目标镜像名:镜像标签 Dockerfile文件所在目录(当前目录就用.)
设置镜像标签:docker tag 镜像ID [用户名称/]镜像源名:新的标签名
Docker容器互联:(docker连接会场景一个父子关系)
新建网络,创建该网络的两个容器,两个容器间可以互联
新建网络:docker network create –d bridge test-net -d指定docker网络类型
查看网络:docker network ls
运行一个容器并连接到新建的test-net网络:docker run –itd --name test1 –network test-net ubuntu /bin/bash
运行另个容器并连接到新建的test-net网络:docker run –itd --name test2 –network test-net ubuntu /bin/bash
进入容器1:docker exec –it test1 /bin/bash
在容器1中ping容器2:ping test2
若不能使用ping,需更新安装apt-get update —— apt install iputils-ping —— 提交容器到镜像 ——以新镜像重新运行以上2个容器
查看容器DNS配置信息:docker run -it --rm ubuntu cat etc/resolv.conf
Docker仓库管理:
登录Docker Hub公共仓库:docker login
退出仓库:docker logout
查找镜像:docker search 镜像名
拉取镜像:docker pull 镜像名
推送镜像(用户登录后,将自己的镜像推送到Docker Hub):tag 后再 push
使用Dockerfile定制一个nginx镜像:
在一个空目录下,新建一个Dockerfile文件,内容如下:
FROM nginx
RUN echo '这是一个本地构建的nginx镜像' > /usr/share/nginx/html/index.html
docker build –t 镜像名:标签(nginx:test) .
指令:
COPY:复制命令,从上下文目录中复制文件或者目录到容器里指定路径。
ADD:和COPY类似,会自动解压缩tar压缩文件
CMD:类似于RUN,在docker run 时运行,为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。
ENTRYPOINT:类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效
ENV:设置环境变量
ARG:构建参数,与ENV作用一致。不过作用域不一样。ARG 设置的环境变量只有 docker build 的过程中有效,构建好的镜像内不存在此环境变量。
VOLUME:定义匿名数据卷
EXPOSE:声明端口
WORKDIR:指定工作目录。会在构建镜像的每一层中都存在。这个目录需提前创建好
USER:用于指定执行后续命令的用户和用户组
HEALTHCHECK:用于指定某个程序或者指令来监控 docker 容器服务的运行状态
ONBUID:用于延迟构建命令的执行
创建网络:docker network create –d bridge test-net (或者--driver bridge)
运行容器指定自建网络:docker run --name nginx –network=test-net –itd nginx
运行容器指定默认网络:docker run --name nginx --net bridge –itd nginx 连接到默认的bridge(网桥docker0)上
对于未指定网络的容器,可以添加进网络:docker network connect test-net 容器ID
查看网桥上挂载的接口:brctl show (和容器内的网卡是一对的,所以显示的值是不一样的)
对运行的容器进行挂载:docker run -d -p 80:80 -v /home/spring/docker:/usr/local/apache2/htdocs:ro httpd
/usr/local/apache2/htdocs 就是 apache server 存放静态文件的地方;如果加上:ro表明文件只读权限
在虚拟机中测试连接:curl 127.0.0.1:80 相当于在本地hosts文件指定一个域名,具有优先访问权.(curl -x 127.0.0.1:80这个方法适用于生产环境的服务器来测试自己做为代理商访问是否正常)