Docker的安装与一些基础操作

版权声明:本文为HCG原创文章,未经博主允许不得转载。请联系[email protected] https://blog.csdn.net/qq_39455116/article/details/85342492

Docker学习

1. docker Ubuntu安装
uname -r
    Docker 要求 Ubuntu 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的
	Ubuntu 版本是否支持 Docker。通过 uname -r 命令查看你当前的内核版本
 wget -qO- https://get.docker.com/ | sh
  // 获取最新版本的 Docker 安装包
安装完成后有个提示:

If you would like to use Docker as a non-root user, you should now consider
adding your user to the "docker" group with something like:
sudo usermod -aG docker runoob
Remember that you will have to log out and back in for this to take effect!  
   
  
执行: sudo usermod -aG docker root
//测试运行docker
docker run hello-world
2. 拉取镜像
从 Docker 镜像仓库获取镜像的命令是 docker pull 。其命令格式为:
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
一般都是:
docker pull ubuntu:18.04
3. 从镜像里面退出
exit
4. 列出镜像
docker image ls或者docker images
5. docker占用空间

docker image ls 列表中的镜像体积总和并非是所
有镜像实际硬盘消耗。由于 Docker 镜像是多层存储结构,并且可以继承、复用,
因此不同镜像可能会因为使用相同的基础镜像,从而拥有共同的层。由于 Docker
使用 Union FS,相同的层只需要保存一份即可,因此实际镜像硬盘占用空间很可
能要比这个列表镜像大小的总和要小的多。

dcoker system df

类型  多少个  活跃的  大小  可回收大小
root@yan:/usr/local/mydocker# docker system df
TYPE                TOTAL               ACTIVE              SIZE             RECLAIMABLE
Images              13                  9                   2.215GB             1.175GB (53%)
Containers          39                  3                   63.38kB             63.38kB (100%)
Local Volumes       0                   0                   0B                  0B
Build Cache         0                   0                   0B                  0B

6. 中间层镜像

为了加速镜像构建、重复利用资源,Docker 会利用 中间层镜像。所以在使用一段
时间后,可能会看到一些依赖的中间层镜像。默认的 docker image ls 列表中
只会显示顶层镜像,如果希望显示包括中间层镜像在内的所有镜像的话,需要加 -
a 参数。

$ docker image ls -a

这样会看到很多无标签的镜像,与之前的虚悬镜像不同,这些无标签的镜像很多都
是中间层镜像,是其它镜像所依赖的镜像。这些无标签镜像不应该删除,否则会导
致上层镜像因为依赖丢失而出错。

这样会看到很多无标签的镜像,与之前的虚悬镜像不同,这些无标签的镜像很多都
是中间层镜像,是其它镜像所依赖的镜像。这些无标签镜像不应该删除,否则会导
致上层镜像因为依赖丢失而出错。

7. 列出部分镜像
docker image ls XXX 
例如:docker image ls ubuntu
docker image ls XXX:版本号
例如:docker image ls ubuntu:18.04
7.1 过滤镜像

比如,我们希望看到在 tomcat之后建立的镜像,可以用下面的命令:

docker image ls -f since=XXX:版本号
之前的
docker image ls -f before=XXX:版本号
7.2 列出所有镜像的ID或者其它
只列ID:
docker image ls -q
列出镜像摘要
docker image ls --digests
列出ID和仓库名字
docker image ls --format "{{.ID}}: {{.Repository}}"
列出ID 仓库名称 标签
docker image ls --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"
8. 删除镜像
$ docker image rm [选项] <镜像1> [<镜像2> ...]
 <镜像> 可以是 镜像短 ID 、 镜像长 ID 、 镜像名 或者 镜像摘要 。
 其中镜像名是  仓库名:标签
8.1 批量删除

可以使用 docker image ls -q 来配合使
用 docker image rm ,这样可以成批的删除希望删除的镜像

我们需要删除所有仓库名为 redis 的镜像
docker image rm $(docker image ls -q redis)
9. 常见命令
-it :这是两个参数,一个是 -i :交互式操作,一个是 -t 终端。我们
这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终
端。
docker run --name webserver -d -p 80:80 nginx
这条命令会用 nginx 镜像启动一个容器,命名为 webserver ,并且映射了 80
端口,这样我们可以用浏览器去访问这个 nginx 服务器。
docker exec -it webserver bash
进入容器
删除已经创建的所有容器
docker rm $(docker ps -a -q)
     删除所有镜像
docker rmi $(docker images -q)
        杀死所有正在运行的容器
docker kill $(docker ps -a -q)
        删除所有已经停止的容器
docker rm $(docker ps -a -q)
        删除所有未打 dangling 标签的镜像
docker rmi $(docker images -q -f dangling=true)
         删除所有镜像
docker rmi $(docker images -q)
        强制删除镜像名称中包含“doss-api”的镜像
docker rmi --force $(docker images | grep doss-api | awk '{print $3}')
 	   删除所有未使用数据
docker system prune
       只删除未使用的volumes
docker volume prune

可以使用 docker container rm 来删除一个处于终止状态的容器。例如
 docker container rm XXX
清理掉所有处于终止状态的容器。
 docker container prune
 

当用docker rmi $(docker images -q)删除不掉一些镜像的时候,发现它又多个版本号,这个时候可以用

docker rmi   tomcat:8.5
指定版本号就可以了
10. 启动
$ docker run -t -i ubuntu:18.04 /bin/bash
root@af8bae53bdd3:/#
其中, -t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入
上, -i 则让容器的标准输入保持打开。
可以利用 docker container start  XXX 命令,直接将一个已经终止的容器启动运
行。
docker ps -a 查看已经关闭的
10.2 后台运行

更多的时候,需要让 Docker 在后台运行而不是直接把执行命令的结果输出在当前
宿主机下。此时,可以通过添加 -d 参数来实现。

docker run ubuntu:18.04 /bin/sh -c "while true; do echo hello
world; sleep 1; done"
docker logs XXX  查看日志
11 . 终止容器
docker container stop XXX

此外,当 Docker 容器中指定的应用终结时,容器也自动终止。
例如对于上一章节中只启动了一个终端的容器,用户通过 exit 命令或 Ctrl+d
来退出终端时,所创建的容器立刻终止。

终止状态的容器可以用 docker container ls -a 命令看到。
docker container restart 命令会将一个运行态的容器终止,重启
12. 进入容器
某些时候需要进入容器进行操作,包括使用 docker attach 命令或 docker
exec 命令,推荐大家使用 docker exec 命令,原因会在下面说明。

docker attach XXXID

只用 -i 参数时,由于没有分配伪终端,界面没有我们熟悉的 Linux 命令提示
符,但命令执行结果仍然可以返回。
当 -i -t 参数一起使用时,则可以看到我们熟悉的 Linux 命令提示符

docker exec -it XXXID bash

B容器导入与导出

1. 导入导出容器
docker export XXXID > ubuntu.tar 
这样将导出容器快照到当前文件夹
 ubuntu.tar 可以重命名

导入

cat XXX.tar | docker import - test/ubuntu:v1.0
 XXX.tar是你的tar
 test/ubuntu:v1.0 是你想导入的名称和版本号

此外,也可以通过指定 URL 或者某个目录来导入,例如
$ docker import http://example.com/exampleimage.tgz example/imag
erepo

注:用户既可以使用 docker load 来导入镜像存储文件到本地镜像库,也可以
使用 docker import 来导入一个容器快照到本地镜像库。这两者的区别在于容
器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状
态),而镜像存储文件将保存完整记录,体积也要大。此外,从容器快照文件导入
时可以重新指定标签等元数据信息。


C镜像

docker search XXX  查找镜像

dockers pull XXX  下载镜像到本地

docker push  上传镜像(需要账号)


数据卷

创建一个数据卷
$ docker volume create my-vol
查看所有的 数据卷
$ docker volume ls
local my-vol

docker volume inspect my-vol
在主机里使用以下命令可以查看指定 数据卷 的信息

下面创建一个名为 web 的容器,并加载一个 数据卷 到容器的 /webapp 目
录。
$ docker run -d -P \
--name web \
# -v my-vol:/wepapp \
--mount source=my-vol,target=/webapp \
training/webapp \
python app.py

docker inspect XXX
查看数据卷的具体信息

$ docker volume rm XXX
删除数据卷

数据卷 是被设计用来持久化数据的,它的生命周期独立于容器,Docker 不会在

容器被删除后自动删除 数据卷 ,并且也不存在垃圾回收这样的机制来处理没有任

何容器引用的 数据卷 。如果需要在删除容器的同时移除数据卷。可以在删除容器
的时候使用 docker rm -v 这个命令。
无主的数据卷可能会占据很多空间,要清理请使用以下命令
$ docker volume prune
数据卷
 


1. 映射端口
-P 随机映射端口

hostPort:containerPort
格式本地的 5000 端口映射到容器的 5000 端口
-p 5000:5000

1.1 映射指定IP地址的指定端口
ip:hostPort:containerPort

-p 127.0.0.1:5000:5000

1.2 映射指定IP地址的任意端口
ip::containerPort
-p 127.0.0.1::5000

还可以使用 udp 标记来指定 udp 端口
-p 127.0.0.1:5000:5000/udp

docker port XXXX 5000
查看端口

docker run的参数: 
-a=map[]: 附加标准输入、输出或者错误输出 
–c=0: 共享CPU格式(相对重要) 
–cidfile=“”: 将容器的ID标识写入文件 
–d=false: 分离模式,在后台运行容器,并且打印出容器ID 
–e=[]:设置环境变量 
–h=“”: 容器的主机名称 
–i=false: 保持输入流开放即使没有附加输入流 
–privileged=false: 给容器扩展的权限 
–m=“”: 内存限制 (格式:, unit单位 = b, k, m or g) 
–n=true: 允许镜像使用网络 
–p=[]: 匹配镜像内的网络端口号 支持格式:ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort。 
–rm=false:当容器退出时自动删除容器 (不能跟 -d一起使用) 
–t=false: 分配一个伪造的终端输入 
–u=“”: 用户名或者ID 
–dns=[]: 自定义容器的DNS服务器 
–v=[]: 创建一个挂载绑定:[host-dir]:[container-dir]:[rw|ro].如果容器目录丢失,docker会创建一个新的卷 
–volumes-from=“”: 挂载容器所有的卷 
–entrypoint=“”: 覆盖镜像设置默认的入口点 
–w=“”: 工作目录内的容器 
–lxc-conf=[]: 添加自定义-lxc-conf=“lxc.cgroup.cpuset.cpus = 0,1″ 
–sig-proxy=true: 代理接收所有进程信号(even in non-tty mode) 
–expose=[]: 让你主机没有开放的端口 
–link=“”: 连接到另一个容器(name:alias) 
–name=“”: 分配容器的名称,如果没有指定就会随机生成一个 ,容器的名称是唯一的。 
–P=false: Publish all exposed ports to thehost interfaces 公布所有显示的端口主机接口
 


保存镜像

保存镜像的命令为:
$ docker save alpine -o filename
$ file filename
filename: POSIX tar archive
这里的 filename 可以为任意名称甚至任意后缀名,但文件的本质都是归档文件
注意:如果同名则会覆盖(没有警告)


还可以压缩
docker save alpine | gzip > alpine-latest.tar.gz

导入镜像

然后我们将 alpine-latest.tar.gz 文件复制到了到了另一个机器上,可以用下
面这个命令加载镜像:
$ docker load -i alpine-latest.tar.gz
Loaded image: alpine:latest
如果我们结合这两个命令以及 ssh 甚至 pv 的话,利用 Linux 强大的管道,我
们可以写一个命令完成从一个机器将镜像迁移到另一个机器,并且带进度条的功
能:
docker save <镜像名> | bzip2 | pv | ssh <用户名>@<主机名> 'cat | do
cker load'
其它制作镜像的方式
132

 docker commit test-centos1 centos_sshd:7.0
 命令注释:commit: 提交一个具有新配置的容器成为镜像,
 后面跟容器的name 或者容器Id ,最后是生成新镜像的名字

docker run -it -d --name test-centos1 centos
d72250ecaa5e3e36226a1edd749f494d9f00eddc4143c81ac3565aa4e551791a
命令注释:-it : 进行交互式操作

     -d : 等同于 -d=true,容器将会在后台运行,不然执行一次命令后,退出后,便是exit状态了。

     --name : 容器启动后的名字,默认不指定,将会随机产生一个名字。或者使用 -name="containers_name" 

     centos:使用的镜像名称

猜你喜欢

转载自blog.csdn.net/qq_39455116/article/details/85342492