龙空技术网

小寒袭来三九天之Docker常用命令学习

励志全书 239

前言:

现时咱们对“win81ubuntu启动”大体比较关怀,你们都想要剖析一些“win81ubuntu启动”的相关内容。那么小编也在网上搜集了一些对于“win81ubuntu启动””的相关内容,希望你们能喜欢,看官们快快来学习一下吧!

java

Docker概念

镜像(Image):相当于root文件系统。分层存储(由多层文件系统联合组成)。镜像是静态的定义,类比面向对象程序设计中的类

容器(Container):容器是镜像运行时的实体。类比面向对象程序设计中的实例。容器可以被创建、启动、停止、删除、暂停等。容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样

仓库(Repository):集中的存储、分发镜像的服务。一个注册服务器 Docker Registry 中可以包含多个仓库( Repository) ;每个仓库可以包含多个标签 ( Tag) ;每个标签对应一个镜像。(通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版 本。<仓库名>:<标签>)默认的 Registry:官方的 Docker Hub

访问仓库

登录:docker login

退出:docker logout

搜索镜像:docker search image-name

拉取镜像:docker pull image-name(<仓库名>:<标签> )

标记镜像:docker tag ubuntu:17.10 username/ubuntu:17.10

推送镜像:docker push username/ubuntu:17.10

使用镜像

Docker1.13+:docker image

Docker 运行容器前需要本地存在对应的镜像,如果镜像不存在本地,Docker 会从镜像仓库下载( 默认是 Docker Hub )

获取镜像:

$ docker pull [选项] [Docker Registry地址]<仓库名>:<标签>

docker pull centos:latest

运行镜像(新建并运行容器):

$ docker run -it --rm ubuntu:14.04 bash

列出镜像:

$ docker images

定制镜像:

Dockerfile脚本是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层。(行尾添加 \ 的命令换行;行首 # 进行注释)

从一个容器创建新镜像(创建到本地,并不会推送到仓库):

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

docker commit container-name my-image:version2

删除本地镜像:

docker rmi [选项] <镜像1> [<镜像2> ...]

使用容器

Docker1.13+:docker container

启动容器:

新建并启动:

docker run ubuntu:14.04 /bin/echo 'Hello world' 与在本地直接执行 /bin/echo 'hello world' 几乎感觉不出任何区别;

启动一个 bash 终端,允许用户进行交互:

$ docker run --name container-name -it ubuntu:17.10 /bin/bash

Docker 在后台运行的标准操作包括:

检查本地是否存在指定的镜像,不存在就从公有仓库下载

利用镜像创建并启动一个容器

分配一个文件系统,并在只读的镜像层外面挂载一层可读写层

从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去

从地址池配置一个 ip 地址给容器

执行用户指定的应用程序

执行完毕后容器被终止

启动已终止容器:docker start -i container-name

后台运行容器:

java

添加 -d 参数让 Docker 在后台运行而不是直接把执行命令的结果输出在当前宿主机下

查看所有容器

查看所有启动的容器:docker ps

查看所有启动/关闭的容器:docker ps -a

获取容器的控制台输出信息:docker logs container-name

终止容器:

docker stop container-name

当Docker容器中指定的应用终结时,容器也自动终止

查看终止状态的容器:docker ps -a

重启容器:docker restart container-name

进入后台容器(已启动容器):

直接进入容器 启动命令 的终端,不会启动新的进程:docker attach container-name

在容器中打开新的终端,并且可以启动新的进程:docker exec -it container-name bash

如果想直接在终端中查看启动命令的输出,用attach;其他情况使用exec。

导入导出容器:

导出容器:

$ docker export 7691a814370e > ubuntu.tar

导入容器快照:

$ cat ubuntu.tar | docker import - test/ubuntu:v1.0

也可以通过指定 URL 或者某个目录来导入:$ docker import example/imagerepo

删除容器:

删除一个处于终止状态的容器:docker rm container-name

删除一个运行中的容器:docker rm -f container-name

清理掉所有处于终止状态的容器:docker container prune

Docker数据管理

Docker1.13+:docker volume

数据卷( Volumes)与挂载主机目录:

数据卷特点:

对数据卷的更新,不会影响镜像

数据卷可以在容器之间共享和重用;对数据卷的修改会立马生效(宿主机和容器)

数据卷默认会一直存在,即使容器被删除。数据卷生命周期独立于容器,Docker 不会在容器被删除后自动删除 数据卷 ,并且也不存在垃圾回收这样的机制来处理没有任何容器引用的 数据卷;如果需要在删除容器的同时移除数据卷,可以在删除容器的时候使用 docker rm -v 这个命令

数据卷的使用,类似于Linux下对目录或文件进行mount

创建一个数据卷:docker volume create my-vol

查看所有的数据卷:docker volume ls

查看指定数据卷的信息:docker volume inspect my-vol

删除数据卷:docker volume rm my-vol

清理无主的数据卷:docker volume prune

创建并启动容器时,挂载一个数据卷到容器中:--mount 或-v。

docker run -d \

-it \

--name devtest \

--mount source=my-vol,target=/app \

nginx:latest

创建并启动容器时,挂载一个主机目录/文件到容器中作为数据卷:--mount 或-v。

docker run --rm -it \

# -v $HOME/.bash_history:/root/ \ --mount type=bind,source=$HOME/.bash_history,target=/root \

centos:latest \

bash

--rm 参数:在容器退出时,把容器和数据卷一起删除(数据卷删除,但本地目录并不会删除)。类似在当容器退出后,使用docker rm -v 。与-d不能共用

宿主机目录如果不存在,则会自动在宿主机生成

容器目录必须是绝对路径,宿主机目录最好也是绝对路径(因为宿主机的相对路径指的是/var/lib/docker/volumes/,与宿主机的当前目录无关)

宿主机与容器中挂载的目录/文件的修改是实时重用的(增删查改一致);容器销毁后,宿主机的目录/文件并不会销毁

查看容器的数据卷、网络等具体信息:docker inspect container-name

宿主机与docker容器之间复制文件:

从宿主机复制到容器:docker cp foo.txt mycontainer:/foo.txt

从容器复制到宿主机:docker cp mycontainer:/foo.txt foo.txt

Docker网络功能

Docker 允许通过外部访问容器或容器互联的方式来提供网络服务。

Docker 1.13+:docker network

容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来指定端口映射。

创建并启动容器时,使用 ip : hostPort : containerPort 格式指定:把容器端口(containerPort)映射到一个特定地址的特定端口(ip : hostPort):

docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py

docker run -d -p 5000:5000 training/webapp python app.py

当使用 -P 标记时,Docker 会把内部容器开放的网络端口随机映射到宿主机的49000~49900的端口。

查看映射端口配置:

$ docker port container-name [port]

输出:containerPort -> 宿主机host:port

容器互联:

新建网络:$ docker network create -d bridge my-net

创建容器并连接到网络:$ docker run -it --rm --name busybox1 --net my-net busy。所有连接到同一个网络的容器之间可以相互ping通

常用

数据卷、网络等都需要在创建和运行docker容器时指定,一旦容器创建了,就不能再改变。对已创建的容器添加数据卷、网络映射配置的方法:

1、stop running container

docker stop test01

2、commit the container

docker commit test01 test02

NOTE: The above, test02 is a new image that I'm constructing from the test01 container.

3、re-run from the commited image

docker run -p 8080:8080 -td test02

最后来一张Docker常用命令行图:

java

标签: #win81ubuntu启动