docker和docker-compose命令学习

0x0 背景

目前docker和docker-compose 逐渐普及流行,故记录一些常见操作,以备查看。

docker和docker-compose命令学习_第1张图片

 

 

0x01安装docker

1.检查内核

Centos系统内核要不低于3.10。查询当前内核版本:

uname -r

2.移除旧版的docker

yum remove docker \

                  docker-client \

                  docker-client-latest \

                  docker-common \

                  docker-latest \

                  docker-latest-logrotate \

                  docker-logrotate \

                  docker-engine

3.Docker依赖的工具

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

4.添加软件源

这里我们添加的是阿里云的软件源:

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

官方的软件源为:

yum-config-manager \

    --add-repo \

https://download.docker.com/linux/centos/docker-ce.repo

5.安装docker

查看可进行安装的docker版本

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

docker和docker-compose命令学习_第2张图片

我们可以使用这种格式进行安装指定版本

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

这里为:

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

6.启动docker

systemctl start docker

7.添加国内加速地址

vi  /etc/docker/daemon.json 文件,修改为如下形式

{

    "registry-mirrors": [

        "http://hub-mirror.c.163.com",

        "https://docker.mirrors.ustc.edu.cn",

        "https://registry.docker-cn.com"

    ]

}

加载重启docker

systemctl restart docker

查看是否成功

docker info

8.官方镜像源

Docker Hub

官方帮助文档:

Install Docker Engine on CentOS | Docker Documentation

0x02 安装docker-compose

下载docker-compose

可以直接在机器执行以下命令:

curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

或者直接在浏览器上打开https://github.com/docker/compose/releases 找到对应的版本,下载放到/usr/local/bin/目录下面

赋予权限

chmod +x /usr/local/bin/docker-compose

如果出现docker-compose不存在,则执行以下命令:

ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

官方帮助文档

Install Docker Compose | Docker Documentation

Compose V2 帮忙文档:Compose V2 | Docker Documentation

0x03 docker命令

1.帮助命令

docker version   #显示docker的版本信息

docker info    #显示详细的系统详细,包括镜像和容器的数量

docker命令 --help #显示该命令的详细信息,以及使用方法

2.镜像命令

查看镜像

docker images   #查看本地主机上的镜像

docker images -a  #列出所有镜像           

docker images -q  #只显示镜像的id

搜素镜像

docker search镜像名

#参数介绍    --f        过滤选项

实例:docker search --filter=SIZE=5000 mysql

下载镜像

docker pull 镜像名      #默认下载最新版本的镜像

docker pull 镜像名:版本号 #下载指定版本

删除镜像

docker rmi -f 镜像id  #删除镜像,必须停止并且删除容器后,才可以删除镜像

docker rmi -f 镜像id  镜像id   #删除多个镜像

docker rmi -f $(docker image -aq) #删除所有本地的镜像

3.容器命令

我们只有有了镜像,才可以常见容器,容器运行在镜像上面

新建并启动容器

docker run [选项] 镜像名

#选项解释

docker run --name='centos01' #容器的名称,用于区分同一镜像创建的不同容器

docker run -d   #后台运行

docker run -it  #交互式运行,并进入容器查看内容

docker run -p 容器端口   #指定容器的端口

docker run -p ip:主机端口:容器端口

示例:docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py

指定映射使用一个特定地址

docker run -p 主机端口:容器端口 

示例:docker run -itd --name hfish -p 80:5000 threatbook/hfish-server

容器里80端口映射给宿主机的5000端口,通过宿主机绑定本地IP(所有接口上的所有地址):5000访问该项目的主页。

docker run -P   #Docker会随机映射一个49000~49900 的端口到内部容器开放的网络端口。

示例:docker run -d -P training/webapp python app.py

 app.py启动web 应用提供的界面是5000端口,docker将本地主机的 49155 被映射到了容器的 5000 端口,此时访问本机的 49155 端口即可访问容器内 web 应用提供的界面

列出运行的容器

docker ps   #列出正在运行的容器

docker ps  -a  #列出正在运行的容器+历史上运行的容器

启动容器

docker start 容器id

docker restart 容器id

停止容器

docker stop 容器id

docker kill 容器id                #强制停止容器

进入容器

docker exec -it  CONTAINER ID(容器的编号)  /bin/bash #进入容器后,会开启新的终端,在里面操作

exit     # 退出并停止容器

Ctrl+q+p   #退出不停止容器

docker attach 容器id #进入容器后,不会开启新的终端,直接使用正在运行的终端

删除容器

docker rm 容器id   #删除指定容器,不可以删除正在运行中的容器

docker rm -f  容器id  #可以删除正在运行中的容器

docker rm -f $(docker ps -aq) #删除所有容器

容器和宿主机互相拷贝文件

docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径

把宿主机/downloads/packages.txt 拷贝到 ubuntu1.2容器的/home

docker cp /downloads/packages.txt  ubuntu1.2:/home

docker cp 容器名:要拷贝的文件在容器里面的路径       

要拷贝到宿主机的相应路径 例:

把容器 ubuntu1.2里面的/downloads/a,txt  拷贝到宿主机中/downloads中

docker cp ubuntu1.2:/downloads/a.txt  /downloads

查看日志

docker logs 容器id

docker logs --tf --tail 日志显示条数 容器id

查看容器中的进程数

docker top 容器id

查看镜像的元数据

docker inspect 容器id

4.常见命令

进入容器

docker ps  # 获取到容器CONTAINER ID

docker exec -it  CONTAINER ID(容器的编号)  /bin/bash #进入容器

docker exec -it  CONTAINER ID(容器的编号)  bash #进入容器

删除镜像

docker ps -a # 获取到容器ID (CONTAINER ID)

docker stop CONTAINER ID  #停止容器,如果容器不是运行状态,则不需要该命令。

docker rm CONTAINER ID   #删除指定容器,不可以删除正在运行中的容器

docker image ls    # 获取镜像ID (IMAGE ID )

docker image rm IMAGE ID # 删除镜像

如果删除过程中,提示Error: No such image: e969dc171c5d 需要进行如下操作:

cd /var/lib/docker/image/overlay2/imagedb/content/sha256

docker image ls # 获取镜像ID (IMAGE ID),例如e969dc171c5d

ll |grep e969dc171c5d

docker和docker-compose命令学习_第3张图片

rm -rf e969dc171c5d45549936e620d0354585f5d2554ab014159de8e2c48d4e1cadc7

docker image ls # 查看一下,是否删除了

开通防火墙策略

firewall-cmd --add-port=4434/tcp --permanent  #宿主机的端口4434开放到网络上

firewall-cmd --reload  #配置生效

docker dns 解析出现问题

firewall-cmd --zone=public --add-masquerade --permanent

firewall-cmd --reload  #配置生效

systemctl restart docker

0x04 docker-compose 命令

以下操作必须在存在 docker-compose.yml, docker-compose.yaml, compose.yml, compose.yaml文件的目录下操作

docker和docker-compose命令学习_第4张图片

创建容器

docker-compose up -d  #第一次使用的时候,会创建全部最新的容器

docker-compose up [容器名称] --force-recreate  #重建docker-compose.yml的单个容器

启动容器

docker-compose start [容器名称]  #启动docker-compose.yml的单个容器

docker-compose start # 启动docker-compose.yml的所有容器

docker-compose restart [容器名称] # 重新启动docker-compose.yml的单个容器

docker-compose restart # 重新启动docker-compose.yml的所有容器

停止容器

docker-compose stop [容器名称]

docker-compose stop # 停止docker-compose.yml的所有容器

显示日志

docker-compose logs [容器名称]

删除容器及其数据

docker-compose down  #删除docker-compose.yml的单个容器

docker-compose down -v    #除docker-compose.yml的容器及其数据

docker-compose down [容器名称]  #删除docker-compose.yml的单个容器

更新容器

docker-compose down [容器名称]  #删除docker-compose.yml的单个容器

docker-compose down  #删除docker-compose.yml的单个容器

docker-compose pull [容器名称]

docker-compose up [容器名称] --force-recreate

升级所有容器

 git pull

 docker-compose pull

 docker-compose stop

 docker-compose up -d

你可能感兴趣的:(基础安全,开发知识,docker,docker-compose,容器,docker安装)