Loading
0

Docker容器安装及使用知识总结(持续更新)

1000x200

前言:很久没看过docker知识了,已忘记大半,最近重新拾起,从安装开始,将学习的笔记以及知识点总结一下,防止自己忘记,希望对大家有帮助。本文以Centos7.x为例安装docker容器。
Docker官方帮助文档:https://docs.docker.com/engine/install/centos/
Docker三要素:镜像、容器、仓库
准备篇:
1、卸载旧版本的docker(可省去,根据实际情况狂选择是否卸载)

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

2、安装yum-utils以及配置docker源为阿里云。

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

3、更新yum源

yum makecache fast

安装篇:
1、安装docker

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

2、查看已安装的docker软件包(可以忽略)

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

3、启动Docker

sudo systemctl start docker

4、验证docker安装是否成功,执行如下命令如果页面有显示hello-world 等字样则说明成功了。

sudo docker run hello-world

5、如果要查看docker版本信息可执行如下命令

docker version

卸载篇:
卸载Docker

sudo systemctl stop docker
sudo yum remove docker-ce docker-ce-cli containerd.io docker-compose-plugin
 sudo rm -rf /var/lib/docker
 sudo rm -rf /var/lib/containerd

设置篇:
配置阿里云的镜像加速器
可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
请将xxxxxx.mirror.aliyuncs.com换成自己的加速地址

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]
}
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker

命令篇:
帮助启动类命令
启动docker

systemctl start docker

停止docker

systemctl stop docker

重启docker

systemctl restart docker

查看docker状态

systemctl status docker

开机自启:

systemctl enable docker

查看docker摘要信息:

docker info

查看已拉取的docker镜像

docker images

参数:
  1. -a:列出本地所有镜像,包含历史镜像
  2. -q:只显示镜像ID

[root@blog.tag.gg ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    feb5d9fea6a5   10 months ago   13.3kB

REPOSITORY:镜像的仓库源
TAG:镜像版本
IMAGE ID:镜像id
CREATED:镜像创建时间
SIZE:镜像大小
注意:如果不指定Tag版本,默认是latest 表示最新版。
镜像类命令:
搜索镜像:

docker search xxxx

参数:
  • --limit:只列出N个镜像,默认25个
  • 范例:docker search --limit 5 nginx
拉取镜像:

docker pull xxxx  (下载最新版)

docker pull xxxx:1.6 (下载指定版本的镜像)

查看镜像/容器/数据卷所占用的空间:(类似于linux的df命令)

docker system df

[root@blog.tag.gg ~]# docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          2         1         133.3MB   133.2MB (99%)
Containers      2         0         0B        0B
Local Volumes   0         0         0B        0B
Build Cache     0         0         0B        0B

删除某个镜像:

docker rmi 镜像ID/镜像名

强制删除:

docker rmi -f 镜像ID/镜像名

同时删除多个镜像:

docker rmi -f  A B C

删除全部镜像(谨慎操作

docker rmi -f $(docker images -qa)

docker images -qa:显示全部镜像且只显示镜像id。
虚悬镜像:
仓库名、标签都是<none>的镜像,俗称虚悬镜像,dangling image
容器类命令:
新建+启动容器命令:

docker run 选项 镜像名 命令

参数:
  • --name=“容器新名字” 为容器指定一个名称;
  • -d:后台运行容器并返回容器ID,也即启动守护式容器(后台运行);
  • -i:以交互模式运行容器,通畅与-t同时使用;
  • -t:为容器重新分配一个伪输入终端,等待交互;
  • -P:随机段鸥映射,大写P
  • -p:指定端口映射,小写p

docker run -it 镜像ID /bin/bash

启动容器并修改name:

docker run -it --name=bzyyc  0d493297b409 /bin/bash

查看已启动的容器:

docker ps

[root@blog.tag.gg ~]# docker ps
CONTAINER ID   IMAGE          COMMAND       CREATED              STATUS              PORTS             NAMES
7ec7065fa89f   0d493297b409   "/bin/bash"   About a minute ago   Up About a minute   80/tcp, 443/tcp   gracious_hoover

参数:
  • -a:列出当前所有正在运行的容器+历史上运行过的容器
  • -l:显示最近创建的容器
  • -n:显示最近n个创建的容器
  • -q:静默模式,只显示容器编号
退出容器:
两种退出方式:
  • exit:run进去容器,exit退出,容器停止
  • ctrl+p+q:run进去容器,ctrl+p+q退出,容器不停止
启动已停止的容器:

docker start 容器ID/容器名

重启容器:

docker restart 容器ID/容器名

停止容器:

docker stop 容器ID/容器名

强制停止容器:

docker kill 容器ID/容器名

删除已停止的容器:

docker rm 容器ID/容器名

强制删除运行中的容器(高危

docker rm -f 容器ID/容器名

一次性删除所有容器(高危
强制是删除所有容器,包含运行中的
docker ps -a -q显示所有容器的id

docker rm -f $(docker ps -a -q)
docker ps -a -q |xargs docker rm (传参方式)

启动守护式容器(后台运行) -d后台运行。

docker run -d 容器名

注意:很容易混淆的问题
比如:使用了docker run -d centos 后台运行这个容器,但使用docker ps 看不到容器,使用docker ps -a 查看到容器是退出状态,所以,docker容器后台运行,就必须有一个前台进程,容器运行的命令如果不是那些一直挂起的命令(比如top、tail命令等)就会自动退出。
这是docker的机制问题,比如是web容器,以nginx为例,正常情况下配置了启动服务只需要启动相应的service即可,例如 service nginx start 但是这样做nginx为进程模式运行,就导致docker 前台没有运行应用。这样的容器后台启动后会立即自杀因为他觉得他没事情做了。
所以,最佳的解决方案是:将您要运行的程序以前太进程的形式运行。常见就是命令行模式,表示我还有交互操作,别中断。则用docker run -it cenots    退出时可以用ctrl+q+p
查看容器的日志:

docker logs 容器ID

注意:(待定)某些情况下执行上面命令没有返回任何日志,原因 docker log只能记录输出到终端的内容(stdout或者stderr),输出到文件的无法显示
比如:(待定)运行了redis的容器,可以用这个命令查看,因为redis日志本身是直接输出到终端的。运行了nginx的容器这个命令则无法查看,因为nginx服务日志是记录在文件中的,若要查看,则需要打开nginx日志文件看
查看最近2条日志: docker logs --tail 2 容器名
查看容器内运行的进程:

docker top 容器ID

 查看容器内部细节:

docker inspect 容器ID

运行后可以看到该容器的配置信息,以json格式显示。
进入正在运行的容器,并以命令行交互:

docker exec -it 容器ID bashshell

docker attach 容器ID  

注意:exec和attach区别如下:
exec:在容器中打开新的终端,并且可以启动新的进程用于exit退出,不会导致容器停止。
attach :直接进入容器启动命令的终端,不会启动新的进程用于exit退出,会导致容器停止
如果不需要容器停止,请使用exec

从容器内拷贝文件到宿主机上:

docker cp 容器ID:容器内内路径 宿主机路径

例如:

docker cp fb869f8045a4:/blog.tag.gg.txt /root/

拷贝文件后并重命名:

docker cp fb869f8045a4:/blog.tag.gg.txt /root/blog.tag.gg.docker.txt

镜像导入导出方法:
export:导出容器的内容留作为一个tar归档文件(将容器导出备份)
import:从tar报中的内容创建一个新的文件系统在导入镜像(将备份的镜像导入)
导出:

docker export 容器ID >文件名.tar

范例:

docker export fb869f8045a4 > /root/abcd.tar

导入:

cat 文件名.tar|docker import - 镜像用户/镜像名:镜像版本号

范例:

cat abcd.tar|docker import - blog.tag.gg/nginx:1.8

blog.tag.gg/nginx:1.8(镜像用户/镜像名:镜像版本号)对应的是 REPOSITORY    TAG  
导入后执行命  docker images 可以看到镜像,在执行命令 docker start 7d0a7a994226 启动容器,并执行 docker run -it 7d0a7a994226 /bin/bash 则可启动查看。

























 
1000x200

声明:站长码字很辛苦啊,转载时请保留本声明及附带文章链接:https://blog.tag.gg/showinfo-3-36227-0.html
亲爱的:若该文章解决了您的问题,可否收藏+评论+分享呢?
上一篇:FileZilla FTP软件通过SFTP协议登录Linux系统方法
下一篇:解决:SQLSTATE[08001]: [Microsoft][ODBC Driver 17 for SQL Server]SSL Provider: [error:1425F102:SSL rout