Ubuntu16.04上Docker的安装及基本用法

转载地址:https://blog.csdn.net/yx_222/article/details/80936757

本文主要介绍在Ubuntu16.04 LTS 64位系统下通过apt的Docker官方源安装最新的Docker CE(Community Edition),即Docker社区版的步骤。

Docker安装

卸载可能存在旧版本的docker:

$ sudo apt-get remove docker docker-engine docker-ce docker.io

更新apt包索引:

$ sudo apt-get update

为了使apt可以通过https使用Repository,先安装以下包:

$ sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

添加Docker官方GPG密钥:

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

检查GPG Key信息是否正确:

$ sudo apt-key fingerprint 0EBFCD88

GPG Key信息如下:

pub   4096R/0EBFCD88 2017-02-22

      Key fingerprint = 9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88

uid                  Docker Release (CE deb) <docker@docker.com>

sub   4096R/F273FCD8 2017-02-22

 

添加源信息:

# 将源信息直接写入/etc/apt/sources.list

$ sudo add-apt-repository

    "deb [arch=amd64] https://download.docker.com/linux/ubuntu

    $(lsb_release -cs)

    stable"

或者

#单独创建docker的source.list

$ sudo bash -c "deb [arch=amd64] https://download.docker.com/linux/ubuntu trusty stable > /etc/apt/sources.list.d/docker.list"

再更新下apt包索引:

$ sudo apt-get update

确认Docker的源信息是否正确, 新的源是否添加成功:

$ sudo apt-cache madison docker-ce

安装最新版本的Docker CE:

$ sudo apt-get install -y docker-ce

如果需要安装某个指定版本的Docker CE,而不是最新版本,可用下面命令列出可用的版本列表信息:

$ sudo apt-cache madison docker-ce

第一列是包名,第二列是版本字符串,第三列是存储库名称,它标识出包来自哪个存储库,以及扩展它的稳定性级别。通一下命令安装指定版本的包:

$ sudo apt-get install docker-ce=[版本字符串]

Docker安装验证

$ sudo docker -v

查看Docker安装版本详细信息:

$ sudo docker version

启动Docker

查看docker服务是否启动:

$ sudo systemctl status docker

如果Docker未启动,则启动Docker:

$ sudo systemctl start docke

运行Hello World,校验Docker是否安装成功:

$ sudo docker run hello-world

运行这个命令会下载一个hello-world的镜像, 并且运行在一个容器中。该容器运行时会有如下输出:

Docker开启远程访问

默认情况下,Docker守护进程会生成一个socket(/var/run/docker.sock)文件来进行本地进程通信,而不会监听任何端口,因此只能在本地使用docker客户端或者使用Docker API进行操作。 

如果想在其他主机上操作Docker主机,就需要让Docker守护进程监听一个端口,这样才能实现远程通信。

方法一:临时启动远程访问和本地访问(亲测未能成功开启Docker远程访问)

执行以下命令:

$ sudo dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock &

方法二:永久开启远程访问和本地访问(亲测未能成功开启Docker远程访问)

修改Docker服务启动配置文件,添加一个未被占用的端口号:

Docker服务启动配置文件位置:

Ubuntu位置:/etc/default/docker

Centos位置:/etc/sysconfig/docker

修改启动配置文件,如下:

# 开启远程访问 -H tcp://0.0.0.0:2375

# 开启本地套接字访问 -H unix:///var/run/docker.sock

DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"

重启Docker

$ sudo systemctl restart docker

方法三:永久开启远程访问和本地访问(亲测有效)

外部链接地址:点击打开链接

进入/etc/systemd/system/目录

$ sudo cd /etc/systemd/system/

查找docker.service文件

# 在/etc/systemd/system目录下查找docker.service文件

$sudo find /etc/systemd/system -name docker.service

打开docker.service文件

vim docker.service

 

注释掉:ExecStart=/usr/bin/dockerd -H fd://

添加:ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

保存Docker.service文件

刷新配置

$ sudo systemctl daemon-reload

重新启动Docker守护进程

$ sudo systemctl restart docker

确认是否重启成功

$ sudo ps -ef | grep docker

or

$ sudo ps -A|grep docker

测试Docker远程通讯是否成功开启

Docker客户端校验

浏览器访问:http://Docker服务器IP:2375/info

Docker服务器校验远程访问

docker -H tcp://localhost:2375 images

docker -H tcp://127.0.0.1:2375 images

docker -H tcp://Docker服务器IP:2375 images

Docker服务器校验本地访问

docker info 

户机添加Docker环境变量

DOCKER_HOST=tcp://Docker服务器IP:2375

Docker基本用法(常用命令)

Docker镜像常用命令

搜索镜像

可以使用docker search命令搜索存放在Docker Hub中的镜像,例如:

$ sudo docker search java

执行该命令后,Docker就会在Docker Hub中搜索含有java这个关键词的镜像仓库。执行该命令后可以看到类似于如下的表格:

该表格包含五列,含义如下:

- NAME:镜像仓库名称。

- DESCRIPTION:镜像仓库描述。

- STARS:镜像收藏数,表示该镜像仓库的受欢迎程度,类似于GitHub的Stars。

- OFFICAL:表示是否为官方仓库,该列标记为[OK]的镜像均由个软件的官方项目组创建和维护。由结果可知,java这个镜像仓库是官方仓库,而其他仓库都不是官方镜像仓库。

- AUTOMATED:表示是否为自动构建镜像仓库。

下载镜像

使用docker pull命令即可从Docker Registry上下载镜像,例如:

$ sudo docker pull java

执行该命令后,Docker会从Docker Hub中的java仓库下载最新版本的java镜像。若镜像下载缓慢,可配置镜像加速器。

该命令还可指定想要下载的镜像标签以及Docker Registry地址,例如:

$ sudo docker pull reg.itmuch.com/java:7

这样就可以从指定的Docker Registry中下载标签为7的Java镜像。

列出本地镜像

使用docker images命令即可列出一下载的本地镜像列表。

执行该命令后,将会看到类似于如下表格:

该表格包含了5列,含义如下:

- REPOSITORY:镜像所属仓库名称

- TAG:镜像标签。默认是latest,表示最新。

- IMAGE ID:镜像ID,表示镜像唯一标标识

- CREATED:镜像创建时间

- SIZE:镜像大小

删除本地镜像

使用docker rmi命令即可删除指定镜像

例1:删除指定名称的镜像

$ sudo docker rmi hello-world

表示删除hello-world这个镜像

例2:删除所有镜像

$ sudo docker rmi -f $(docker images)

-f 参数表示强制删除

Docker容器常用命令

新建并启动容器

使用docker run命令即可新建并启动一个容器。

该命令是最常用命令,它有很挫选项,下面将列举一些常用选项。

- d 选项:表示后台运行

- P 选项:随机端口映射

- p 选项:指定端口映射,有一下四种格式

    - ip:hostPort:containerPort

    - ip::containerPort

    - hostPort:containerPort

    - containerPort

- network 选项:指定网络模式,该选项有一下可选参数:

    - --network=bridge:默认选项,表示连接到默认的网桥。

    - --network=host:容器使用宿主机的网络。

    - --network=container:NAME_or_ID:告诉Docker让新建的容器使用已有容器的网络配置。

    - --network=none:不配置该容器的网络,用户可自定义网络配置。

示例1:

$ sudo docker run java /bin/echo 'Hello World'

这样终端会打印Hello World的字样,跟在本地直接执行/bin/echo 'Hello World' 一样。

示例2:

$ sudo docker run -d -p 91:80 nginx

这样就能启动一个Nginx容器。在本例中,为docker run添加了两个参数,含义如下:

-d # 后台运行

-p 宿主机端口:容器端口 # 开放容器端口到宿主机端口

访问http://Docker宿主机IP:91/将会看到如下界面:

列出本地容器

使用docker ps命令即可列出运行中的本地容器,执行该命令后,可以看到类似与如下的表格:

如需要列所有容器(包括已停止的容器),可使用 -a 参数。

该表格包含了7列,含义如下:

- CONTAINER_ID:表示容器ID

- IMAGE:表示镜像名称

- COMMAND:表示启动容器时运行的命令

- CREATED:表示容器创建时间

- STATUS:表示容器运行状态。UP表示运行中,Exited表示已停止。

- PORTS:表示容器对外的端口号

- NAMES:表示容器名称,该名称默认由Docker自动生成,也可使用docker run命令的--name选项自定指定。

停止容器

使用docker stop命令,即可停止容器,例如:

$ sudo docker stop 2730ed88f8e5

其中 2730ed88f8e5 是容器ID,当然也可以使用 docker stop 容器名称 来停止指定容器。

强制停止容器

可以使用docker kill 命令发送SINGKILL信号来强制停止容器。例如:

$ sudo docker kill 2730ed88f8e5

启动已停止的容器

使用docker run命令,即可新建并启动一个容器。对于已停止的容器,可以使用docker start命令来启动。例如:

$ sudo docker start 2730ed88f8e5

重启容器

可使用docker restart命令来重启容器。该命令实际上是先执行了docker stop命令,然后再执行了docker start命令。

进入容器

某场景下,可能需要进入运行中的容器。

使用docker attach命令进入容器。例如:

$ sudo docker attach 2730ed88f8e5

很多场景下,使用docker attach命令并不方便。当多个窗口同时attach到同一个容器时,所有窗口都会同步显示。同理,如果某个窗口发生阻塞,其他窗口也无法执行操作。

可以使用nsenter进入容器。

nsenter工具包含在util-linux 2.23或更高版本中。为了连接到容器,需要找到容器第一个进程的PID,可通过以下命令获取:

$ sudo docker inspect --format "{{.State.Pid}}" $CONTAINER_ID

获得PID后,就可使用nsenter命令进入容器了:

$ sudo nsenter --target "$PID" --mount --uts --ipc --net --pid

下面给出一个完整的例子:

也可将以上两条命令封装成一个Shell,从而简化进入容器的过程。

删除容器

使用docker rm命令即可删除指定容器。

例1:删除指定容器

$ sudo docker rm 2730ed88f8e5

该命令只能删除已停止的容器,如需要删除正在运行的容器,可使用-f参数。

例2:删除所有容器

$ sudo docker rm -f $(docker ps -a -q)

--------------------- 

作者:Xu_619 

来源:CSDN 

原文:https://blog.csdn.net/yx_222/article/details/80936757 

版权声明:本文为博主原创文章,转载请附上博文链接!

本文主要介绍在Ubuntu16.04 LTS 64位系统下通过apt的Docker官方源安装最新的Docker CE(Community Edition),即Docker社区版的步骤。
Docker安装卸载可能存在旧版本的docker:$ sudo apt-get remove docker docker-engine docker-ce docker.io更新apt包索引:$ sudo apt-get update为了使apt可以通过https使用Repository,先安装以下包:
$ sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common添加Docker官方GPG密钥:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -检查GPG Key信息是否正确:
$ sudo apt-key fingerprint 0EBFCD88GPG Key信息如下:
pub   4096R/0EBFCD88 2017-02-22      Key fingerprint = 9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88uid                  Docker Release (CE deb) <docker@docker.com>sub   4096R/F273FCD8 2017-02-22
添加源信息:
# 将源信息直接写入/etc/apt/sources.list$ sudo add-apt-repository     "deb [arch=amd64] https://download.docker.com/linux/ubuntu     $(lsb_release -cs)     stable"或者
#单独创建docker的source.list$ sudo bash -c "deb [arch=amd64] https://download.docker.com/linux/ubuntu trusty stable > /etc/apt/sources.list.d/docker.list"再更新下apt包索引:
$ sudo apt-get update确认Docker的源信息是否正确, 新的源是否添加成功:
$ sudo apt-cache madison docker-ce
安装最新版本的Docker CE:$ sudo apt-get install -y docker-ce如果需要安装某个指定版本的Docker CE,而不是最新版本,可用下面命令列出可用的版本列表信息:$ sudo apt-cache madison docker-ce
第一列是包名,第二列是版本字符串,第三列是存储库名称,它标识出包来自哪个存储库,以及扩展它的稳定性级别。通一下命令安装指定版本的包:
$ sudo apt-get install docker-ce=[版本字符串]Docker安装验证$ sudo docker -v

查看Docker安装版本详细信息:$ sudo docker version

启动Docker查看docker服务是否启动:$ sudo systemctl status docker如果Docker未启动,则启动Docker:$ sudo systemctl start docke运行Hello World,校验Docker是否安装成功:$ sudo docker run hello-world运行这个命令会下载一个hello-world的镜像, 并且运行在一个容器中。该容器运行时会有如下输出:


Docker开启远程访问默认情况下,Docker守护进程会生成一个socket(/var/run/docker.sock)文件来进行本地进程通信,而不会监听任何端口,因此只能在本地使用docker客户端或者使用Docker API进行操作。 如果想在其他主机上操作Docker主机,就需要让Docker守护进程监听一个端口,这样才能实现远程通信。
方法一:临时启动远程访问和本地访问(亲测未能成功开启Docker远程访问)
执行以下命令:$ sudo dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock &方法二:永久开启远程访问和本地访问(亲测未能成功开启Docker远程访问)
修改Docker服务启动配置文件,添加一个未被占用的端口号:Docker服务启动配置文件位置:
Ubuntu位置:/etc/default/docker
Centos位置:/etc/sysconfig/docker
修改启动配置文件,如下:
# 开启远程访问 -H tcp://0.0.0.0:2375# 开启本地套接字访问 -H unix:///var/run/docker.sockDOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"重启Docker$ sudo systemctl restart docker方法三:永久开启远程访问和本地访问(亲测有效)
外部链接地址:点击打开链接
进入/etc/systemd/system/目录$ sudo cd /etc/systemd/system/查找docker.service文件# 在/etc/systemd/system目录下查找docker.service文件$sudo find /etc/systemd/system -name docker.service打开docker.service文件vim docker.service

注释掉:ExecStart=/usr/bin/dockerd -H fd://
添加:ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
保存Docker.service文件
刷新配置$ sudo systemctl daemon-reload重新启动Docker守护进程$ sudo systemctl restart docker确认是否重启成功$ sudo ps -ef | grep dockeror
$ sudo ps -A|grep docker测试Docker远程通讯是否成功开启Docker客户端校验浏览器访问:http://Docker服务器IP:2375/info
Docker服务器校验远程访问docker -H tcp://localhost:2375 images或docker -H tcp://127.0.0.1:2375 images或docker -H tcp://Docker服务器IP:2375 imagesDocker服务器校验本地访问docker info 户机添加Docker环境变量DOCKER_HOST=tcp://Docker服务器IP:2375


Docker基本用法(常用命令)Docker镜像常用命令搜索镜像可以使用docker search命令搜索存放在Docker Hub中的镜像,例如:
$ sudo docker search java执行该命令后,Docker就会在Docker Hub中搜索含有java这个关键词的镜像仓库。执行该命令后可以看到类似于如下的表格:


该表格包含五列,含义如下:
- NAME:镜像仓库名称。
- DESCRIPTION:镜像仓库描述。
- STARS:镜像收藏数,表示该镜像仓库的受欢迎程度,类似于GitHub的Stars。
- OFFICAL:表示是否为官方仓库,该列标记为[OK]的镜像均由个软件的官方项目组创建和维护。由结果可知,java这个镜像仓库是官方仓库,而其他仓库都不是官方镜像仓库。
- AUTOMATED:表示是否为自动构建镜像仓库。
下载镜像使用docker pull命令即可从Docker Registry上下载镜像,例如:
$ sudo docker pull java执行该命令后,Docker会从Docker Hub中的java仓库下载最新版本的java镜像。若镜像下载缓慢,可配置镜像加速器。
该命令还可指定想要下载的镜像标签以及Docker Registry地址,例如:
$ sudo docker pull reg.itmuch.com/java:7这样就可以从指定的Docker Registry中下载标签为7的Java镜像。
列出本地镜像使用docker images命令即可列出一下载的本地镜像列表。
执行该命令后,将会看到类似于如下表格:


该表格包含了5列,含义如下:
- REPOSITORY:镜像所属仓库名称
- TAG:镜像标签。默认是latest,表示最新。
- IMAGE ID:镜像ID,表示镜像唯一标标识
- CREATED:镜像创建时间
- SIZE:镜像大小
删除本地镜像使用docker rmi命令即可删除指定镜像
例1:删除指定名称的镜像
$ sudo docker rmi hello-world表示删除hello-world这个镜像
例2:删除所有镜像
$ sudo docker rmi -f $(docker images)-f 参数表示强制删除
Docker容器常用命令新建并启动容器使用docker run命令即可新建并启动一个容器。
该命令是最常用命令,它有很挫选项,下面将列举一些常用选项。
- d 选项:表示后台运行
- P 选项:随机端口映射
- p 选项:指定端口映射,有一下四种格式
    - ip:hostPort:containerPort
    - ip::containerPort
    - hostPort:containerPort
    - containerPort
- network 选项:指定网络模式,该选项有一下可选参数:
    - --network=bridge:默认选项,表示连接到默认的网桥。
    - --network=host:容器使用宿主机的网络。
    - --network=container:NAME_or_ID:告诉Docker让新建的容器使用已有容器的网络配置。
    - --network=none:不配置该容器的网络,用户可自定义网络配置。
示例1:
$ sudo docker run java /bin/echo 'Hello World'这样终端会打印Hello World的字样,跟在本地直接执行/bin/echo 'Hello World' 一样。
示例2:
$ sudo docker run -d -p 91:80 nginx这样就能启动一个Nginx容器。在本例中,为docker run添加了两个参数,含义如下:
-d # 后台运行-p 宿主机端口:容器端口 # 开放容器端口到宿主机端口访问http://Docker宿主机IP:91/将会看到如下界面:

列出本地容器使用docker ps命令即可列出运行中的本地容器,执行该命令后,可以看到类似与如下的表格:


如需要列所有容器(包括已停止的容器),可使用 -a 参数。
该表格包含了7列,含义如下:
- CONTAINER_ID:表示容器ID
- IMAGE:表示镜像名称
- COMMAND:表示启动容器时运行的命令
- CREATED:表示容器创建时间
- STATUS:表示容器运行状态。UP表示运行中,Exited表示已停止。
- PORTS:表示容器对外的端口号
- NAMES:表示容器名称,该名称默认由Docker自动生成,也可使用docker run命令的--name选项自定指定。
停止容器使用docker stop命令,即可停止容器,例如:
$ sudo docker stop 2730ed88f8e5其中 2730ed88f8e5 是容器ID,当然也可以使用 docker stop 容器名称 来停止指定容器。
强制停止容器可以使用docker kill 命令发送SINGKILL信号来强制停止容器。例如:
$ sudo docker kill 2730ed88f8e5启动已停止的容器使用docker run命令,即可新建并启动一个容器。对于已停止的容器,可以使用docker start命令来启动。例如:
$ sudo docker start 2730ed88f8e5重启容器可使用docker restart命令来重启容器。该命令实际上是先执行了docker stop命令,然后再执行了docker start命令。
进入容器某场景下,可能需要进入运行中的容器。使用docker attach命令进入容器。例如:
$ sudo docker attach 2730ed88f8e5很多场景下,使用docker attach命令并不方便。当多个窗口同时attach到同一个容器时,所有窗口都会同步显示。同理,如果某个窗口发生阻塞,其他窗口也无法执行操作。
可以使用nsenter进入容器。
nsenter工具包含在util-linux 2.23或更高版本中。为了连接到容器,需要找到容器第一个进程的PID,可通过以下命令获取:
$ sudo docker inspect --format "{{.State.Pid}}" $CONTAINER_ID获得PID后,就可使用nsenter命令进入容器了:
$ sudo nsenter --target "$PID" --mount --uts --ipc --net --pid下面给出一个完整的例子:


也可将以上两条命令封装成一个Shell,从而简化进入容器的过程。
删除容器使用docker rm命令即可删除指定容器。
例1:删除指定容器
$ sudo docker rm 2730ed88f8e5该命令只能删除已停止的容器,如需要删除正在运行的容器,可使用-f参数。
例2:删除所有容器
$ sudo docker rm -f $(docker ps -a -q)--------------------- 作者:Xu_619 来源:CSDN 原文:https://blog.csdn.net/yx_222/article/details/80936757 版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/peng-lan/p/10524193.html