Docker的安装与使用

docker是什么

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。 Docker 利用 Linux 核心中的资源分离机制,例如 cgroups,以及 Linux 核心名字空间,来创建独立的容器。期望达到使项目运行环境“一次封装,到处运行的目的”。

Docker

这可以在单一 Linux 实体下运作,避免引导一个虚拟机造成的额外负担。Linux 核心对名字空间的支持完全隔离了工作环境中应用程序的视野,包括行程树、网络、用户 ID 与挂载文件系统,而核心的 cgroup 提供资源隔离,包括 CPU、存储器、block I/O 与网络。

从 0.9 版本起,Dockers 在使用抽象虚拟是经由 libvirt 的 LXC 与 systemd – nspawn 提供界面的基础上,开始包括 libcontainer 库做为以自己的方式开始直接使用由 Linux 核心提供的虚拟化的设施,

依据行业分析公司“451 研究”:“Dockers 是有能力打包应用程序及其虚拟容器,可以在任何 Linux 服务器上运行的依赖性工具,这有助于实现灵活性和便携性,应用程序在任何地方都可以运行,无论是公有云、私有云、单机等。” 。

     Dockerfile 是软件的原材料,Docker 镜像是软件的交付品,而 Docker 容器则可以认为是软件的运行态。从应用软件的角度来看,Dockerfile、Docker 镜像与 Docker 容器分别代表软件的三个不同阶段,Dockerfile 面向开发,Docker 镜像成为交付标准,Docker 容器则涉及部署与运维,三者缺一不可,合力充当 Docker 体系的基石。

docker 配置阿里云镜像

默认的docker镜像仓库在dockerhub,网站美国,所以下载速度非常慢,为了解决这个问题,
国内的一些机构提供了镜像加速服务,最出名的就是阿里云,下面介绍如何配置阿里云镜像
加速;
第一步:
http://dev.aliyun.com 打开阿里云,注册账号或者用淘宝账号登陆;
第二步:
点击进入控制台

 

 

第三步:
选择容器镜像服务,选择镜像加速

 

 

第四步:

 


修改daemon配置文件/etc/docker/daemon.json来使用加速器
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://f1z25q5p.mirror.aliyuncs.com"]
}
保存,运行下面命令,重启docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker
到此结束,docker配置阿里云镜像加速完成,下次拉取镜像就会从阿里云的服务器上下载,
速度会很快速
 

window10安装docker

 

使用win10 安装docker的话,建议通过Docker Toolbox安装。 安装前的准备,查看电脑是否已开启虚拟化,查看方式:可以打开任务管理器->性能->cpu 查看是否有 虚拟化:已启用字样。

下载Docker Toolbox  下载地址http://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/

        下载完毕后桌面会默认生成三个exe文件图标 打开Docker Quickstart Terminal进入客户端。

 

                                                                            

      双击Docker Quickstart Terminal图标,启动一个终端,第一次启动的话你会看到命令行会下载一些东西,等待一下(如果长时间没有下载成功也可以用迅雷下载到指定路径),它会配置Docker Toolbox,之后,当它完成后,你会看到启动成功的画面。

                     

这个终端是运行在bash环境下的,而不是标准的windows命令行,因为Docker需要运行在bash环境下,否则一些命令无法运行。在命令行中输入docker run hello-world并按回车键,如果docker配置成功的话,你会看到命令行中有如下输出: 

                         

接下来我们将通过一个例子(whalesay)来介绍如何运行Docker镜像。

        在运行镜像之前,先让我们来知道一个获取别人已经做好的镜像的方法。因为全世界的人都能够创建Docker镜像,因此Docker提供了一个叫做Docker Hub的地方可以让人们分享自己的Docker镜像或获取别人的Docker镜像。

        打开你的浏览器,并且打开 Docker Hub 地址,在搜索输入框中输入whalesay。在结果中找到docker/whalesay。

 

找到docker/whalesay

        点击docker/whalesay,将会看到whalesay镜像的仓库以及它的一些介绍。

 

whalesay镜像的仓库以及它的一些介绍

        每一个镜像仓库都包含一些关于镜像的信息,这些信息必须包括如镜像中包含了什么软件以及如何使用它们。你可能注意到whalesay镜像是基于Linux的一个发行版Ubuntu,接下来,我们将看到如何在你的机器中运行whalesay镜像。

        在终端中输入docker run docker/whalesay cowsay boo并且回车

                      

运行情况

        当你第一次运行软件镜像的时候,docker命令会先查找你本地系统中是否有这个镜像,如果镜像不存在的话,那么docker会自动从hub上获取这个镜像。

        接下来,在终端中输入 docker images 并且回车,这个命令将显示出你的本地系统中有哪些景象,这个时候你将看到刚刚已经安装了docker/whalesay镜像在列表里面了。

                  

镜像列表

        当你在容器中运行镜像的时候,Docker会下载镜像到你的电脑里面。当镜像的源在hub上被改变的时候,Docker会下载并更新本地的镜像。当然,本地镜像也是可以删除掉的。

可以试一下运行下面这个命令:docker run docker/whalesay cowsay Hello-Harry:

                                  

Hello-Harry

        OK!你已经安装好docker,并且会简单的使用了。

docker的使用(ubuntu为例)

利用docker创建的运行环境叫做docker容器,容器是通过docker镜像创建的,docker镜像文件可以放在私有仓库中也可以放在共有仓库中。最大的公有仓库是官方Docker Hub

查看当前版本

docker version

查看本地所有镜像文件

docker images

搜索互联网上镜像

docker search redis # 搜索redis镜像

 

获取云中ubuntu14的镜像

docker pull ubuntu:14.04

此时查看docker镜像显示

      

创建一个ubuntu14的容器,并且运行容器

docker run -i -t ubuntu:14.04 /bin/bash

docker run -it --name test3 -v /mnt/data:/data ubuntu14.04-backup /bin/bash #共享文件版

-i 表示标准模式;-t 表示是否分配一个伪终端,默认false; -rm 表示容器退出后是否自动删除,默认为false;执行后就进入了docker容器,输入”exit“推出镜像系统。docker run的其他指令

注意:

* docker run 只在第一次运行时使用,将镜像放到容器中,以后再次启动这个容器时,只需要使用命令docker start 即可。

* docker run相当于执行了两步操作:将镜像放入容器中(docker create),然后将容器启动,使之变成运行时容器(docker start)。

* 退出时如果不想终止当前执行的容器,应先按,ctrl+p 再按,ctrl+q 绝对不能使用exit或者ctrl+d来退出,这样整个系统就退出了!!!

此时提示符会出现 container 的id ; 

列出全部装载的容器,包括已停止的和正在运行的

docker ps -a #列出全部装载的容器,包括已停止的和正在运行的
docker ps #列出当前正在运行的容器

可以看到对应container的ID,Image,status, 以及 names

 退出后 再进入ubuntu(容器)

sudo docker start a40cc085c83d #启动容器

sudo docker attach a40cc085c83d #进入运行中的容器(此时没反应,ctrl+c就进入到ubuntu系统中去了)

注意: 此时 ubuntu 环境下做一些事情, 比如:apt-get install 一些包 , exit 之后 

重启的命令为 docker start  -it container_name

* 一定要加 -it 否则 不会有 ubuntu 交互命令行 

其他指令

docker tag xxx tagname 镜像文件加标签;
docker search xxx 查找官方镜像;
docker rmi xxxID/xxxname 删除镜像文件;
docker rm xxx 删除容器;
docker push xxx;上传镜像;
docker import xxx 导入镜像;
docker stop xxx 终止容器;
docker pause xxx 暂停容器;
docker unpause xxx 恢复容器;
docker kill xxx 强制杀死容器;
docker attach xxxID/xxxname 进入后台运行的容器;
docker container inspect xxx 查看一个容器;
docker top xxx 查看容器内进程;
docker stat xxx 查看容器内cup使用情况;
docker container port test 查看容器端口;
docker commit origin_container_id new_image 执行一些新的操作后添加容器到另外一个镜像/保存版本号
docker exec -it  CONTAINER_ID  bash 进入容器终端并且的保留为容器终端的输入形式.

win10 DockerToolbox 将window目录共享给docker容器

然后配置virtualbox虚拟机与docker容器之间的文件夹共享:

#将前面在虚拟机中创建的 /mnt/data 目录挂载到docker容器的 /data 中:
docker run -it --name test3 -v /mnt/data:/data ubuntu14.04-backup /bin/bash

对docker 数据卷的管理

数据卷指容器与主机的共享/映射目录
默认是 /var/lib/docker/volumes,也可指定路径
创建一个容器ubuntu命名为dbdata,放在数据卷dbdata里面

docker run -it -v /dbdata --name dbdata ubuntu

更实用的: 

sudo docker run -it --name kalibr -v /home/dell/docker/:/home/catkin_ws jorgeluisrmx/ros-indigo /bin/bash

注:共享宿主机 home下docker 文件 一定写成绝度路径的形式,即 /home/dell/docker.

 

通过镜像training/webapp创建一个后台运行的容器命名为web,并在其中运行python app.py。自动分配端口号,把容器中webapp映射到主机/opt/webapp 位置。

docker run -d -P --name web --mount type=bind,source=/webapp,destination=/opt/webapp training/webapp python app.py

docker容器内文件编辑

1.通过Vi编辑,安装个Vi软件就行。

2.容器内文件与本机文件间相互拷贝。

  通过docker cp把这个文件拷贝出来

sudo docker cp xxxx:/etc/mysql/my.cnf /home/tom/

  再拷贝回去

sudo docker cp  /home/tom/my.cnf  xxxx:/etc/mysql/

    注意:

         这个xxxx是docker ps -a 获取的container id

docker镜像的导出与导入

docker镜像导出 

先用docker images 查看本地的docker镜像,然后执行:

docker save 2c5e00d77a67 > D:\Docker\ubuntu14.04.tar

注意:
save是导出命令,4e4c445311e6是镜像ID,然后空格,一定要空格否则会报错!空格之后输入“>”,再空格,输入你想要导出的路径和导出后的文件名。如上,导出到C盘,文件名为node.tar。
稍等片刻,你就能看到C盘里有node.tar 的压缩文件。

注意:如果docker用户权限不够,需先切至root用户:

docker-machine ssh #进入虚拟机系统

sudo -i #切换至超级用户

如果你想把tar 包导入进docker 虚拟机,用docker load 命令。

操作结果如下图:

docker镜像导入

#格式为
docker load < 路径\文件名

注意:

格式,load和“<”之间要有空格,“<”和“D:\***.tar”之间要有空格。

docker容器的备份、恢复和迁移

所有的Docker镜像层对于容器来说,都是只读的,容器对于文件的写操作绝对不会作用在镜像中。因此如果我们想保存我们已经做了一些操作的容器,我们需要对容器进行备份。

1.备份容器

首先,为了备份Docker中的容器,我们会想看看我们想要备份的容器列表。要达成该目的,我们需要在我们运行着Docker引擎,并已创建了容器的Linux机器中运行 docker ps 命令。

在此之后,我们要选择我们想要备份的容器,然后去创建该容器的快照。我们可以使用 docker commit 命令来创建快照。

docker commit :从容器创建一个新的镜像。

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

-a :提交的镜像作者;

-c :使用Dockerfile指令来创建镜像;

-m :提交时的说明文字;

-p :在commit时,将容器暂停。

docker commit -a "wangdongsheng" -m "add opencv" 16b306ace74e mykalibr:v0.1

  该命令会生成一个作为Docker镜像的容器快照,我们可以通过运行 docker images 命令来查看Docker新备份的镜像。

上面做的快照已经作为Docker镜像保存了。现在,为了备份该快照,我们有两个选择,一个是我们可以登录进Docker注册中心,并推送该镜像;另一个是我们可以将Docker镜像打包成tar包备份,以供今后使用。

如果我们想要在Docker注册中心上传或备份镜像,我们只需要运行 docker login 命令来登录进Docker注册中心,然后推送所需的镜像即可。

docker login
docker tag a25ddfec4d2a arunpyasi/container-backup:test
docker push arunpyasi/container-backup

如果我们不想备份到docker注册中心,而是想要将此镜像保存在本地机器中,以供日后使用,那么我们可以将其作为tar包备份。要完成该操作,我们需要运行以下 docker save 命令。参考上一章节docker镜像的导出与导入内容。

2. 恢复容器

接下来,在我们成功备份了我们的Docker容器后,我们现在来恢复这些制作了Docker镜像快照的容器。如果我们已经在注册中心推送了这些Docker镜像,那么我们仅仅需要把那个Docker镜像拖回并直接运行即可。

docker pull arunpyasi/container-backup:test

但是,如果我们将这些Docker镜像作为tar包文件备份到了本地,那么我们只要使用 docker load 命令,后面加上tar包的备份路径,就可以加载该Docker镜像了。参考上一章节docker镜像的导出与导入内容。

在镜像被加载后,我们将用加载的镜像去运行Docker容器。

3. 迁移Docker容器

      迁移容器同时涉及到了上面两个操作,备份和恢复。我们可以将任何一个Docker容器从一台机器迁移到另一台机器。在迁移过程中,首先我们将把容器备份为Docker镜像快照。然后,该Docker镜像或者是被推送到了Docker注册中心,或者被作为tar包文件保存到了本地。如果我们将镜像推送到了Docker注册中心,我们简单地从任何我们想要的机器上使用 docker run 命令来恢复并运行该容器。但是,如果我们将镜像打包成tar包备份到了本地,我们只需要拷贝或移动该镜像到我们想要的机器上,加载该镜像并运行需要的容器即可。

 

docker使用案例

我们创建一个ubuntu14.04的Docker镜像,将其运行起来后,并通过浏览器进行访问.

$ docker images                                                                                                                                 REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              14.04               2c5e00d77a67        7 months ago        188MB
hello-world         latest              fce289e99eb9        11 months ago       1.84kB
docker/whalesay     latest              6b362a9f73eb        4 years ago         247MB

dell@DESKTOP-3A7NUAG MINGW64 /c/Program Files/Docker Toolbox
$ docker run -i -t ubuntu:14.04 /bin/bash

root@2b5c8535d957:/# cd home/
root@2b5c8535d957:/home# mkdir test
root@2b5c8535d957:/home# ls
test
root@2b5c8535d957:/home# exit
exit

dell@DESKTOP-3A7NUAG MINGW64 /c/Program Files/Docker Toolbox
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                      PORTS               NAMES
2b5c8535d957        ubuntu:14.04        "/bin/bash"         About a minute ago   Exited (0) 18 seconds ago                       jovial_lederberg
4f2f9b72054e        ubuntu:14.04        "/bin/bash"         45 minutes ago       Up 45 minutes                                   busy_hugle
dc58014d3127        docker/whalesay     "cowsay boo"        3 hours ago          Exited (0) 3 hours ago                          charming_leakey
518c2b5b233f        hello-world         "/hello"            3 hours ago          Exited (0) 3 hours ago                          sharp_lumiere
e466c342ca70        hello-world         "/hello"            3 hours ago          Exited (0) 3 hours ago                          confident_jang
ff9c375780ac        hello-world         "/hello"            3 hours ago          Exited (0) 3 hours ago                          angry_lalande

dell@DESKTOP-3A7NUAG MINGW64 /c/Program Files/Docker Toolbox
$ docker commit 2b5c8535d957 ubuntu14.04-backup
sha256:606d75ed19c674d9acc0665a2ef8e5a672642941c546387ff6ec07fd61f26685

dell@DESKTOP-3A7NUAG MINGW64 /c/Program Files/Docker Toolbox
$ docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
ubuntu14.04-backup   latest              606d75ed19c6        10 seconds ago      188MB
ubuntu               14.04               2c5e00d77a67        7 months ago        188MB
hello-world          latest              fce289e99eb9        11 months ago       1.84kB
docker/whalesay      latest              6b362a9f73eb        4 years ago         247MB

dell@DESKTOP-3A7NUAG MINGW64 /c/Program Files/Docker Toolbox
$ docker run -i -t -d --name ubuntu-test -p 9000:80 ubuntu14.04-backup /bin/bash                                                                C:\Program Files\Docker Toolbox\docker.exe: Error response from daemon: Conflict. The container name "/ubuntu-test" is already in use by container "1535a7c5f6f3f175b5007318662f19f996ad57808eaf86b5bd99c5f5bdd0c588". You have to remove (or rename) that container to be able to reuse that name.
See 'C:\Program Files\Docker Toolbox\docker.exe run --help'.

dell@DESKTOP-3A7NUAG MINGW64 /c/Program Files/Docker Toolbox
$ docker run -i -t -d --name ubuntu-test2 -p 9000:80 ubuntu14.04-backup /bin/bash
2702f9fcb476db1e4918eec3c11b8f533bd8e132c28a56bd12d080087f91ceef

dell@DESKTOP-3A7NUAG MINGW64 /c/Program Files/Docker Toolbox
$ docker ps
CONTAINER ID        IMAGE                COMMAND             CREATED             STATUS              PORTS                  NAMES
2702f9fcb476        ubuntu14.04-backup   "/bin/bash"         11 seconds ago      Up 11 seconds       0.0.0.0:9000->80/tcp   ubuntu-test2
4f2f9b72054e        ubuntu:14.04         "/bin/bash"         About an hour ago   Up 57 minutes                              busy_hugle


dell@DESKTOP-3A7NUAG MINGW64 /c/Program Files/Docker Toolbox
$ ipconfig

Windows IP 配置


以太网适配器 以太网:

   媒体状态  . . . . . . . . . . . . : 媒体已断开连接
   连接特定的 DNS 后缀 . . . . . . . :

以太网适配器 VirtualBox Host-Only Network:

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::8ccd:19ba:9bb6:8a24%45
   IPv4 地址 . . . . . . . . . . . . : 192.168.56.1
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . :

以太网适配器 VirtualBox Host-Only Network #2:

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::5512:d2ee:e5d9:3d27%54
   IPv4 地址 . . . . . . . . . . . . : 192.168.99.1
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . :

无线局域网适配器 本地连接* 1:

   媒体状态  . . . . . . . . . . . . : 媒体已断开连接
   连接特定的 DNS 后缀 . . . . . . . :

无线局域网适配器 本地连接* 10:

   媒体状态  . . . . . . . . . . . . : 媒体已断开连接
   连接特定的 DNS 后缀 . . . . . . . :

无线局域网适配器 WLAN:

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::8dfd:87bb:e9b:9153%11
   IPv4 地址 . . . . . . . . . . . . : 192.168.107.19
   子网掩码  . . . . . . . . . . . . : 255.255.248.0
   默认网关. . . . . . . . . . . . . : 192.168.104.1

以太网适配器 以太网 2:

   媒体状态  . . . . . . . . . . . . : 媒体已断开连接
   连接特定的 DNS 后缀 . . . . . . . :

以太网适配器 蓝牙网络连接:

   媒体状态  . . . . . . . . . . . . : 媒体已断开连接
   连接特定的 DNS 后缀 . . . . . . . :

dell@DESKTOP-3A7NUAG MINGW64 /c/Program Files/Docker Toolbox
$

Linux下docker安装

1.更新Ubuntu的apt源索引

 

$ sudo apt-get update

2.安装包允许apt通过HTTPS使用仓库

 

$ sudo dpkg --configure -a
$ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

3.添加Docker官方GPG key

 

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

4.设置Docker稳定版仓库

 

$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

5.更新apt源索引

 

$ sudo apt-get update

6.安装最新版本Docker CE(社区版)

 

$ sudo apt-get install docker-ce

查看安装Docker的版本

 

$ docker --version

检查Docker CE 是否安装正确

 

$ sudo docker run hello-world

基本命令

 

# 启动docker
sudo service docker start

# 停止docker
sudo service docker stop

# 重启docker
sudo service docker restart

# 列出镜像
docker image ls

# 拉取镜像
docker image pull library/hello-world

# 删除镜像
docker image rm 镜像id/镜像ID

# 创建容器
docker run [选项参数] 镜像名 [命令]

# 停止一个已经在运行的容器
docker container stop 容器名或容器id

# 启动一个已经停止的容器
docker container start 容器名或容器id

# kill掉一个已经在运行的容器
docker container kill 容器名或容器id

# 删除容器
docker container rm 容器名或容器id

 

使用时:

利用数据卷共享工程,编译再到docker 容器里面

 

 

参考链接:

https://www.jianshu.com/p/e8427d12b3e0

https://www.leiue.com/what-is-docker

https://www.jianshu.com/p/36350a72fe44

https://blog.csdn.net/weixin_42547154/article/details/84107501

https://www.cnblogs.com/yizhipanghu/p/9681225.html

https://www.cnblogs.com/yfalcon/p/9044246.html

https://www.jianshu.com/p/80e3fd18a17e

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker是一种开源的容器化平台,它可以帮助开发者将应用程序及其依赖项打包成一个独立的容器,以便在不同的环境中进行部署和运行。下面是Docker安装使用步骤: 1. 安装Docker:首先,你需要在你的操作系统上安装DockerDocker支持多个操作系统,包括Windows、macOS和Linux。你可以访问Docker官方网站(https://www.docker.com/)下载并安装适合你操作系统的Docker版本。 2. 配置Docker安装完成后,你需要配置Docker。在Windows和macOS上,Docker会自动启动,并在系统托盘中显示一个图标。在Linux上,你可能需要手动启动Docker服务。 3. 验证安装:打开终端或命令提示符,运行以下命令来验证Docker是否成功安装: ``` docker version ``` 4. 获取镜像:Docker使用镜像来创建容器。你可以从Docker Hub(https://hub.docker.com/)上获取各种镜像,也可以自己构建镜像。例如,你可以使用以下命令获取一个名为"ubuntu"的Ubuntu镜像: ``` docker pull ubuntu ``` 5. 运行容器:使用以下命令来运行一个容器: ``` docker run -it ubuntu ``` 这将在一个交互式终端中启动一个基于Ubuntu镜像的容器。 6. 使用容器:一旦容器启动,你可以在容器内执行各种操作,就像在一个独立的虚拟机中一样。你可以安装软件、运行命令等。当你退出容器时,容器将停止运行。 7. 管理容器:你可以使用各种Docker命令来管理容器。例如,使用以下命令列出正在运行的容器: ``` docker ps ``` 使用以下命令停止一个容器: ``` docker stop <container_id> ``` 8. 清理资源:当你不再需要某个容器时,可以使用以下命令删除它: ``` docker rm <container_id> ``` 如果你不再需要某个镜像,可以使用以下命令删除它: ``` docker rmi <image_id> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值