开发环境之Docker

Posted xdzy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开发环境之Docker相关的知识,希望对你有一定的参考价值。

查看更多开发环境配置,请点击《开发环境配置大全》

贰拾壹章:Docker安装教程

CentOS Docker 安装

1)更新包

yum包更新到最新

sudo yum update

 

2)设置仓库

2.1 安装所需的软件包,yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2

sudo yum install -y yum-utils   device-mapper-persistent-data   lvm2

 

2.2 设置yum源为阿里云

sudo yum-config-manager     --add-repo     http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

 

3)安装docker社区版

方式一:简单安装

sudo yum install docker-ce

 

方式二:安装最新版本的 Docker Engine-Community 和 containerd

sudo yum install docker-ce docker-ce-cli containerd.io

 

方式三:安装特定版本的 Docker Engine-Community

先列出并排序您存储库中可用的版本,此示例按版本号(从高到低)对结果进行排序。

yum list docker-ce --showduplicates | sort -r

 

通过其完整的软件包名称安装特定版本,该软件包名称是软件包名称(docker-ce)加上版本字符串(第二列),从第一个冒号(:)一直到第一个连字符,并用连字符(-)分隔。例如:docker-ce-18.09.1

sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io

 

4)查看版本

docker -v

 

5)卸载docker

查看docker安装过的包

yum list installed | grep docker

卸载docker

yum remove docker-ce.x86_64 ddocker-ce-cli.x86_64 -y

 

6)设置ustc下载镜像

ustc是老牌的linux镜像服务提供者,它的docker镜像加载速度很快

编辑文件:

vi /etc/docker/daemon.json

在文件中设置:

{
    "registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]
}

 

7)启动和关闭docker

7.1 启动

systemctl start docker

 

7.2 查看状态

systemctl status docker

技术图片

 

7.3 关闭

systemctl stop docker

 

7.4 重启

systemctl restart docker

 

7.5 设置开机自启

systemctl enable docker

 

7.6 查看docker信息和帮助文档

$ docker info
$ docker --help

 

8)镜像相关命令

8.1 查看镜像

docker images

技术图片

技术图片

REPOSITORY:镜像名称

TAG:镜像标签

IMAGE ID:镜像ID

CREATED:镜像创建时间

SIZE:镜像大小

 

8.2 搜索镜像

docker search jdk8(这是镜像名称)

技术图片

技术图片

NAME:仓库名称

DESCRIPTION:镜像描述

STARS:星级,即镜像受欢迎程度

OFFICIAL:是否官方

AUTOMATED:自动构建,表示该镜像是由Docker Hub自动构建流程创建的

 

8.3 拉取/下载镜像:

docker pull ascdc/jdk8 (这是镜像仓库+名称)

如果要设置镜像标签(TAG),则冒号+版本号,默认为latest,表示最终版本:

docker pull ascdc/jdk8:8

 

8.4 删除镜像

docker rmi 2e7780388817 (镜像ID)

如果要删除所有镜像,则(下面不是单引号,是esc下面那个键):

docker rmi `docker images -q`

 

如果删除镜像报:Error response from daemon: conflict: unable to delete 6ec9a5a0fc9f (cannot be forced) - image has dependent child images 这样的错误,原因是有另外的 image FROM 了这个 image,可以使用下面的命令列出所有在指定 image 之后创建的 image 的父 image :

docker image inspect --format=‘{{.RepoTags}} {{.Id}} {{.Parent}}‘ $(docker image ls -q --filter since=xxxxxx)

其中 xxxxxx 是报错 image 的 id,从列表中查找到之后就可以核对并删除这些 image。

 

如果删除镜像报:Error response from daemon: conflict: unable to delete d0957ffdf8a2 (must be forced) - image is referenced in multiple repositories是因为有多个镜像的IMAGE ID是相同的,可以使用REPOSITORY+TAG的方式去删除;如下:

docker rmi centos:centos6

centos:镜像名称

centos6:tag标签名称,是默认值latest的话可以不写

 

9)容器相关命令

镜像相当于模板,一个镜像可以创建多个容器

9.1 查看正在运行的容器

docker ps

 

9.2 查看所有创建的容器

docker ps -a

 

9.3 查看最后一次运行的容器

docker ps -l

 

9.4 查看停止的容器

docker ps -f status=exited

 

9.5 创建并启动容器

docker run

-i:表示运行容器。

-t:表示容器启动后会进入其命令行,加入-it这2个参数之后,容器创建就能登录进去,即分配一个伪终端。

--name:为创建的容器命名。

-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。

-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后会自动进去容器)。

-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口,可以使用多个-p做多个端口映射。

 

交互式方式创建容器

docker run -it --name=容器名称 镜像名称:标签 /bin/bash

如果版本为latest,则可省略:

docker run -it --name=nginx nginx /bin/bash

技术图片

技术图片

创建完成之后就进入到了该容器之中,退出命令使用exit即可,退出之后则容器停止。

 

守护式方式创建容器

docker run -di --name=容器名称 镜像名称:标签

登录守护式容器方式:

docker exec -it 容器名称(或者容器ID)/bin/bash

如下创建同一个nginx镜像的守护式容器,说明一个镜像可以创建多个容器,只要名字不设置重复:

docker run -di --name=nginx2 nginx

IMAGES才是容器名称,IMAGE是镜像,前面那个ID就是容器ID,STATUS状态为up则表示正在运行:

技术图片

登录容器:

docker exec -it nginx2 /bin/bash

使用exit退出容器,查看正在运行容器发现这个容器还在运行,这就是守护式和交互式的区别。

 

9.6 启动和关闭容器

启动容器:

docker start 容器名称或容器ID

停止容器:

docker stop 容器名称或容器ID

启动所有容器:

docker start $(docker ps -a -q)

停止所有容器:

docker stop $(docker ps -a -q)

 

9.7 拷贝文件

拷贝到容器:

docker cp 需要拷贝的文件或目录 容器名称:容器目录
docker cp 1.txt nginx:/usr/local

从容器拷出到当前目录,并修改为2.txt:

docker cp 容器名称:文件路径 需要拷贝到的目录+文件名称
docker cp nginx:/usr/local/1.txt 2.txt

 

9.8 目录挂载

在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样就可以通过修改宿主机某个目录的文件从而去修改容器文件。

docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=nginx3 nginx

如果是多级目录,可能会出现权限不足的情况,这是服务器把权限禁止了,需要添加--privileged=true来解决该问题。

 

9.9 查看容器IP

查看容器所有信息:

docker inspect 容器名称或容器ID

查看IP:

docker inspect --format=‘{{.NetworkSettings.IPAddress}}‘ 容器名称或容器ID

 

9.10 删除容器

注意:无法删除正在运行的容器,如果删除镜像,有该镜像的容器正在运行,也是不能删除镜像的

docker rm 容器名称或容器ID

删除所有容器:

docker rm $(docker ps -a -q)

 

10)备份与迁移

10.1 容器保存为镜像

docker commit nginx nginx

前面nginx是容器名称,后面那个是镜像名称

保存时会将整个容器保存为镜像,即配置好的所有内容都会保存

 

10.2 备份镜像

将nginx镜像保存为nginx.tar压缩包,也可以指定路径保存

docker save -o nginx.tar nginx

 

10.3 镜像恢复与迁移

保存为压缩包之后就可以上传到任意的服务器中,然后通过以下命令就可以将镜像导入到docker中,可以指定路径导入

docker load -i nginx.tar

 

以上是关于开发环境之Docker的主要内容,如果未能解决你的问题,请参考以下文章

深入浅出Docker:Docker的集成测试部署之道

Python全栈开发之Docker

Docker之简介

NVIDIA Jetson之docker容器使用

NVIDIA Jetson之docker容器使用

小白贴:Docker 实战之 CentOS7 系统环境配置