首页 > 技术文章 > Dokcer的一些命令:

spring1122 2020-03-04 11:22 原文

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这个方法适用于生产环境的服务器来测试自己做为代理商访问是否正常)

 

推荐阅读