linux下的docker操作笔记


docker是一个很流行的容器服务,比逻辑虚拟机更加简单和移植方便!

三个概念:

  • 镜像(IMAGE):简而言之,一个只读模板,可被无限实例化
  • 容器(CONTAINER):一个从模板克隆出来的实例,轻量级可执行的独立软件包
  • 仓库(REPOSITORY):将容器打包成为一个别人的镜像放置的容身之所

本笔记直接从代码说起,基本上囊括了你会用到的所有docker操作命令。

说明

docker的logo,就是一个背着一堆集装箱的大鲸鱼,这已经很形象说明docker是什么东西了!

以下的IMAGE_NAME和CONTAINER_NAME 请根据实际情况替换成对应的镜像名和容器名。

常用命令

运行Docker守护进程:systemctl start docker
停止Docker守护进程:systemctl stop docker
重启Docker守护进程:systemctl restart docker
设置Docker开机自启动:systemctl enable docker

列出所有镜像:docker images

列出运行中的容器:docker ps
列出创建的所有容器:docker ps -a
启动容器:docker start CONTAINER_NAME/CONTAINER_ID
重启容器:docker restart CONTAINER_NAME/CONTAINER_ID
停止容器:docker stop CONTAINER_NAME/CONTAINER_ID

守护进程开启容器:docker run -d --name ALIAS_CONTAINER_NAME IMAGE_NAME
进入后台守护中运行的容器:docker exec -it IMAGE_NAME /bin/bash
创建容器映射端口停止就删:docker run --rm --name nginxtest -p 8081:81 -d nginx

查看容器最近的100条日志:docker logs -f -t --tail=100 CONTAINER_NAME
查看容器的运行状态:docker stats -a

安装 docker

使用的是官方步骤的翻译版

清除旧版本docker

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

安装yum工具

sudo yum install -y yum-utils

配置docker源

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

安装 Docker

sudo yum install docker-ce docker-ce-cli containerd.io
以下表示成功安装:

Installed:
  container-selinux-2:2.124.0-1.module_el8.2.0+305+5e198a41.noarch           containerd.io-1.3.9-3.1.el8.x86_64             
  docker-ce-3:19.03.14-3.el8.x86_64                                          docker-ce-cli-1:19.03.14-3.el8.x86_64          
  libcgroup-0.41-19.el8.x86_64                                              
Complete!

安装其他版本更多内容,请参考官方教程,有很多可选的配置和拓展。

启动 Docker

systemctl start docker

查看安装信息

docker info

拉取helloword测试镜像并启动容器

docker run hello-world

附:卸载docker

卸载包:sudo yum remove docker-ce docker-ce-cli containerd.io
删除配置资源目录:sudo rm -rf /var/lib/docker

管理镜像 IMAGES

查看镜像

docker images

拉取镜像

语法:docker pull [镜像地址/]镜像名[:版本标签名]

以 Docker Hub 的 Nginx 镜像为例:docker pull nginx
以上同等于:docker pull docker.io/nginx:latest

修改标签(方便记忆):docker tag docker.io/nginx:latest chinacloud/nginx:v1

删除镜像

docker rmi IMAGE_NAME
强制删除镜像:docker rmi -f IMAGE_NAME

使用容器 CONTAINER

容器的状态主要有7种:

被创建 created
重启中 restarting
运行中 runing 或 Up
迁移中 removing
暂停 paused
退出停止 exited
消亡 dead

查看容器

查看运行中的容器:docker ps
查看所有容器(含停止中未删除的):docker ps -a

对已存在的容器操作

启动容器:docker start CONTAINER_NAME/CONTAINER_ID
重启容器:docker restart CONTAINER_NAME/CONTAINER_ID
停止容器:docker stop CONTAINER_NAME/CONTAINER_ID

创建并启动容器

创建容器:docker run -d IMAGE_NAME
启动容器:docker run -it IMAGE_NAME /bin/bash
退出容器:exit
进入后台运行的容器:docker exec -it IMAGE_NAME /bin/bash
设置随着docker启动:docker container update --restart=always NGINX_IMAGE_NAME

加别名运行:--name ALIAS_CONTAINER_NAME

若出现容器一运行就停止的情况,是因为容器里面内部没有前台运行任务而自杀线程了,可以创建容器的时候执行:
docker run -d --name CONTAINER_NAME IMAGE_NAME /bin/bash -c "tail -f /dev/null"

删除容器

一般删除容器:docker rm CONTAINER_NAME
删除所有停止的容器:docker container prune

将容器做成镜像

提交:docker commit <容器 ID 或容器名> [<仓库名>[:<标签>]]
docker commit containerID/containerName repository:tag
例如:docker commit IMAGE_NAME chinacloud/nginx:v2

导入/导出容器

从本地导入容器:cat docker/CONTAINER_NAME.tar | docker import - test
导出容器到本地:docker export CONTAINER_NAME > 文件夹/CONTAINER_NAME.tar

更新容器启动参数

如增加随着docker启动而启动:docker container update --restart=always

制作镜像并远程发布 REPOSITORY

(参考腾讯云)

编辑Dockerfile 文件

vim Dockerfile
添加如下内容:

FROM chinacloud/nginx:v2  #基础镜像来源。
MAINTAINER DTSTACK #镜像拥有者。
RUN mkdir /dtstact # RUN 后面接容器运行前需要执行的命令,由于 Dockerfile 文件不能超过127行,因此当命令较多时建议写到脚本中执行。
ENTRYPOINT ping https://cloud.tencent.com/ #开机启动命令,此处最后一个命令需要是可在前台持续执行的命令,否则容器后台运行时会因为命令执行完而退出。

构建镜像

docker build -t nginxos:v1 .
注意:点号.是 Dockerfile 文件的路径,不能忽略。

运行容器并查看容器

docker run -d nginxos:v1  #守护进程后台运行容器
docker logs CONTAINER ID/IMAGE   #如未查看到刚才运行的容器,则用容器 ID 或者名字查看启动日志排错。

制作镜像

docker commit IMAGE_NAME nginxweb:v2 #commit 参数后添加容器 ID 和构建新镜像的名称和版本号。
docker images #列出本地(已下载的和本地创建的)镜像。

将镜像推送至远程仓库

默认推送到Docker Hub 。
需要先登录 Docker,为镜像绑定标签,将镜像命名为 Docker 用户名/镜像名:标签的格式。

docker login #执行后输入镜像仓库用户名及密码
docker tag [镜像名]:[标签] [用户名]:[标签]
docker push [用户名]:[标签]

切换docker加速镜像

国内的的确很慢,可以尝试切换docker加速镜像,阿里云的自己在容器解决方案那里获取,腾讯云的如下:

使用镜像源(腾讯云为例):

vim /etc/docker/daemon.json
加入如下源:

{
    "registry-mirrors": [
        "https://mirror.ccs.tencentyun.com"
    ]
}

重启docker:

sudo systemctl daemon-reload
sudo systemctl restart docker

docker安装centos8

默认的几个包都是apt-get的我还是习惯centos的yum和ll!
拉取镜像:docker pull centos:centos8
澡堂容器:docker run -it --rm --name centos80 centos:centos8

专门管理mysql或mariadb的容器,检出centos8镜像,然后创建容器命令:
docker run -it --name centos80db --link mysql56:mysql56 -v /data/testing:/opt/testing centos:centos8

拓展阅读

阿里云:部署并使用Docker(CentOS 8)
腾讯云:搭建 Docker
centos7安装LD4NMP(docker,nginx,mariadb,php)


原文链接:https://blog.yongit.com/note/767658.html