docker使用大全

自己检索方便

1 docker安装

1.1卸载旧版本

较旧的 Docker 版本称为 docker 或 docker-engine 。如果已安装这些程序,请卸载它们以及相关的依赖项。

(1)杀死所有运行容器

docker kill $(docker ps -a -q)

(2)删除所有容器

docker rm $(docker ps -a -q)

(3)删除所有镜像

docker rmi $(docker images -q)

(4)停止 docker 服务

systemctl stop docker

(5)删除存储目录

rm -rf /etc/docker# rm -rf /run/docker# rm -rf /var/lib/dockershim# rm -rf /var/lib/docker

如果发现删除不掉,需要先 umount,如

umount /var/lib/docker/devicemapper

(6)首先搜索已经安装的docker 安装包

[root@localhost ~]# yum list installed|grep docker 
docker.x86_64 2:1.12.6-16.el7.centos @extras 
docker-client.x86_64 2:1.12.6-16.el7.centos @extras 
docker-common.x86_64 2:1.12.6-16.el7.centos @extra

(7) 分别删除安装包

[root@localhost ~]#yum –y remove docker.x86_64 docker-client.x86_64 docker-common.x86_64 

(8) 删除docker 镜像

[root@localhost ~]# rm -rf /var/lib/docker 

(9)再次check docker是否已经卸载成功

[root@localhost ~]# yum list installed|grep docker 

如果没有,就表示卸载成功。

在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库。之后,您可以从仓库安装和更新 Docker。

1.2安装 Docker Engine-Community

设置仓库

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

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

可以选择国内的一些aliyun源地址:

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

1.3安装 Docker Engine-Community

(1)安装最新版本的 Docker Engine-Community 和 containerd,或者转到下一步安装特定版本:

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

(2)安装特定版本的docker

列出可以安装的可用版本

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

选择特定版本安装,这里选择18.06.0.ce-3.el7版本

sudo yum install docker-ce-18.06.0.ce-3.el7 -y

1.4启动 Docker。

sudo systemctl start docker

通过运行 hello-world 映像来验证是否正确安装了 Docker Engine-Community 。

sudo docker run hello-world

1603272603871

1.5 CentOS中修改Docker的默认根目录

1) 先使用: ‘docker info’ 命令,看下原来默认的根目录位置

docker info

2)先关闭docker服务

service docker stop

3)直接修改/etc/docker/daemon.json:

修改docker安装目录到/mnt目录:

{
    "data-root": "/mnt/docker"
}

4)在你指定的目录位置新建文件夹 /new-path/docker

5)重启docker服务

service docker start
sudo systemctl start docker

6)使用docker info命令确认是否修改成功

2 docker常用命令

$docker search ubantu #搜索镜像
$docker pull ubantu  #载入镜像
$docker run -it ubuntu /bin/bash #启动镜像
root@ed09e4490c57:/# exit退出容器
$ docker ps -a  #查看所有的容器
$ docker ps -l #查看最后一次创建的容器
$ docker start b750bbbcfd88  #使用 docker start 启动一个已停止的容器
$ docker stop <容器 ID>  #停止一个容器
$ docker restart <容器 ID>  #重启一个容器
$ docker rm -f <容器 ID> #删除一个容器
$ docker rmi  <镜像名称> #删除一个镜像
$ docker run -itd --name ubuntu-test ubuntu /bin/bash #后台运行容器
$ docker exec -it <容器 ID> /bin/bash #进入一个容器

镜像打包如下:

$docker ps 
$docker login harbor.XX.io/openvas 
#输入域帐号&密码
$docker commit <容器name> harbor.XX.io/openvas:[tag_openvas_20200710_XXXX]
$docker push harbor.XX.io/openvas:[tag_openvas_20200710_XXXX] #

2.1 docker 访问宿主机目录

挂载一个目录

docker run -it -v $path_to_host_data:$new_path_in_docker deep_sleepnet:1.0 /bin/bash

执行之后,相当于把此数据目录挂载在对应docker的目录中,用 即可查看并访问所挂载数据。Dockerfile中最后一行运行相应的

例如:

[root@m01ly ~]# docker run -it -m 4G -v /var/log/suricata:/mnt -p 5601:5601 -p 9200:9200 -p 5044:5044 sebp/elk: 638
[root@m01ly ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                                              NAMES
45a7bc7b174d        sebp/elk:623        "/usr/local/bin/star…"   13 hours ago        Up 12 hours         0.0.0.0:5044->5044/tcp, 0.0.0.0:5601->5601/tcp, 0.0.0.0:9200->9200/tcp, 9300/tcp   charming_wu
[root@m01ly ~]# docker exec -it 45a7bc7b174d bash
root@45a7bc7b174d:/# ls
bd_build  bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

可以看到宿主机文件夹mnt

1603765650364

挂载两个目录

注意每个目录前都要加参数-v

docker run -it -v $path_to_host_data:$new_path_in_docker -v $path1_to_host_data:$new_path1_in_docker deep_sleepnet:1.0 /bin/bash

2.2 查看docker容器linux版本

查看 Docker Linux 容器系统对应发行版本。

使用如下命令查看。

cat /etc/issue

而常用的 uname -a 等等命令,则是查看到宿主机的发行版本

1615972275875

2.3 集合操作

列出所有的容器 ID

docker ps -aq

停止所有的容器

docker stop $(docker ps -aq)

删除所有的容器

docker rm $(docker ps -aq)

删除所有的镜像

docker rmi $(docker images -q)

删除所有不使用的镜像

docker image prune --force --all或者docker image prune -f -a

删除所有停止的容器

docker container prune -f

批量删除镜像

可以删除所有名字中带 “none” 关键字的镜像,即可以把所有编译错误的镜像删除。

docker rmi $(docker images | grep "none" | awk '&#123;print $3&#125;') 

上面这条命令,可以删除所有名字中带 “none” 关键字的镜像,即可以把所有编译错误的镜像删除。

这个 grep 后面的参数,就是筛选出名字中包含这个参数的镜像。

3 dockerfile

https://www.runoob.com/docker/docker-dockerfile.html

3.1 dockerfile编写

3.2 构建镜像

在 Dockerfile 文件的存放目录下,执行构建动作。

以下示例,通过目录下的 Dockerfile 构建一个 nginx:v3(镜像名称:镜像标签)。

docker build -t nginx:v3 .

:最后的 . 代表本次执行的上下文路径。上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。

解析:由于 docker 的运行模式是 C/S。我们本机是 C,docker 引擎是 S。实际的构建过程是在 docker 引擎下完成的,所以这个时候无法用到我们本机的文件。这就需要把我们本机的指定目录下的文件一起打包提供给 docker 引擎使用。

如果未说明最后一个参数,那么默认上下文路径就是 Dockerfile 所在的位置。

注意:上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。

文章目录
  1. 1 docker安装
    1. 1.1卸载旧版本
    2. 1.2安装 Docker Engine-Community
    3. 1.3安装 Docker Engine-Community
    4. 1.4启动 Docker。
    5. 1.5 CentOS中修改Docker的默认根目录
  • 2 docker常用命令
    1. 2.1 docker 访问宿主机目录
      1. 挂载一个目录
      2. 挂载两个目录
    2. 2.2 查看docker容器linux版本
    3. 2.3 集合操作
      1. 列出所有的容器 ID
      2. 停止所有的容器
      3. 删除所有的容器
      4. 删除所有的镜像
      5. 删除所有不使用的镜像
      6. 删除所有停止的容器
      7. 批量删除镜像
  • 3 dockerfile
    1. 3.1 dockerfile编写
    2. 3.2 构建镜像