在线体验 docker https://labs.play-with-docker.com/
更换为国内的源
vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://kfwkfulq.mirror.aliyuncs.com",
"https://2lqq34jg.mirror.aliyuncs.com",
"https://pee6w651.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com"
],
"dns": ["8.8.8.8","8.8.4.4"]
}
systemctl restart docker
安装
安装所需的软件包
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
设置稳定的仓库
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
安装最新版本的 Docker Engine-Community 和 containerd
yum -y install docker-ce docker-ce-cli containerd.io
启动
systemctl start docker
基本命令
镜像操作
列出本地镜像
docker images
列出镜像, 包含中间镜像层
docker images -a
列出镜像只显示镜像ID
docker images -q
列出镜像, 含中间镜像层只显示镜像ID
docker images -qa
显示镜像摘要信息
docker images --digests
显示镜像完整信息
docker images --no-trunc
显示指定镜像的历史创建; 参数-H 镜像大小和日期, 默认为true
--no-trunc
显示完整的提交记录
-q
仅列出提交记录ID
docker history -H redis
镜像搜索
这里搜索mysql镜像为例子
docker search mysql
--filter=stars=600
只显示stars>=600
的镜像
docker search --filter=stars=600 mysql
--no-trunc
显示镜像完整 DESCRIPTION 描述
docker search --no-trunc mysql
--automated
只列出AUTOMATED=OK
的镜像
docker search --automated mysql
镜像下载
下载redis官方最新镜像, 相当于 docker pull redis:latest
docker pull redis
下载仓库所有redis镜像
docker pull -a redis
下载私人仓库镜像
docker pull 仓库用户名/redis
镜像删除
单个镜像删除, 相当于 docker rmi redis:latest
docker rmi redis
强制删除(比如删除正在运行的容器进程)
docker rmi -f redis
多个镜像删除, 以空格间隔开
docker rmi -f redis mysql nginx
删除本地全部镜像
docker rmi -f $(docker images -q)
容器操作
容器操作可使用容器ID(CONTAINER ID)或容器名称(NAMES)
容器启动
新建并启动容器
参数
-i
以交互模式运行容器
-t
为容器重新分配一个伪终端
-d
已守护方式启动容器
--name
为容器指定一个名称
docker run -i -t --name mycentos
docker run -it --name mycentos
后台启动容器
docker run -d mycentos
启动一个或多个已被停止的容器
docker start redis
重启容器
docker restart redis
容器进程
列出redis容器中运行的进程
docker top redis
容器日志
查看redis容器日志, 默认参数
docker logs redis
查看redis容器日志
参数
-f
跟踪日志输出
-t
显示时间戳
--tail
仅列出最新N条容器日志
docker logs -f -t --tail=20 redis
查看容器redis从2019年05月21日后最新10条日志
docker logs --since="2019-05-21" --tail=10 redis
容器的进入与退出
使用run方式在创建时进入
docker run -it centos /bin/bash
容器关闭并退出
exit
仅退出容器, 不关闭
ctrl + P + Q
直接进入centos容器启动命令的终端, 不会启动新进程,
多个attach连接共享容器屏幕
参数
--sig-proxy=false
确保ctrl+D或ctrl-c不会关闭容器
docker attach --sig-proxy=false centos
在centos容器中打开新的交互模式终端, 可以启动新进程
参数
-i
即使没有附加也保持STDIN打开
-t
分配一个伪终端
docker exec -i -t centos /bin/bash
以交互模式在容器中执行命令, 结果返回到当前终端屏幕
docker exec -i -t centos ls -l /tmp
以分离模式在容器中执行命令, 程序后台运行, 结果不会反馈到当前终端
docker exec -d centos touch cache.txt
查看容器
查看正在运行的容器
docker ps
查看正在运行的容器ID
docker ps -q
查看正在运行+历史运行过的容器
docker ps -a
显示运行容器总文件大小
docker ps -s
显示最近创建的容器
docker ps -l
显示最近创建的3个容器
docker ps -n 3
不截断输出
docker ps --no-trunc
获取镜像redis的元信息
docker inspect redis
获取正在运行的容器redis的IP
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis
容器的停止与删除
停止一个运行中的容器
docker stop redis
杀掉一个运行中的容器
docker kill redis
删除一个已停止的容器
docker rm redis
删除一个运行中的容器
docker rm -f redis
删除多个容器
docker rm -f $(docker ps -a -q)
docker rm -f $(docker ps -aq)
docker ps -a -q | xargs docker rm
-l
移除容器间的网络连接, 裂解名为db
docker rm -l db
-v
删除容器, 并删除容器挂载的数据卷
docker rm -v redis
生成镜像
基于当前redis容器创建一个新的镜像
参数
-a
提交的镜像作者
-c
使用Dockerfile指令来创建镜像
-m
提交时的说明文字
-p
在commit时将容器暂停
docker commit -a="Develop1024" -m="my redis" [容器ID] myredis:v1.1
容器与主机间的数据拷贝
将redis容器中的文件copy至本地路径
docker cp redis:/容器路径 本地路径
将主机文件copy到redis容器
docker cp 本地路径 redis:/容器路径
将主机文件copy至redis容器, 目录重命名为容器路径
docker cp 本地路径 redis:/容器路径
数据卷,目录映射
创建数据卷
docker volume create 数据卷名称
# /var/lib/docker/volumes/
查看数据卷信息
docker volume inspect 数据卷名称
[root@localhost tomcat]# docker volume inspect tomcat
[
{
"CreatedAt": "2020-10-15T03:20:45-04:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/tomcat/_data",
"Name": "tomcat",
"Options": {},
"Scope": "local"
}
]
查看全部数据卷
[root@localhost tomcat]# docker volume ls
DRIVER VOLUME NAME
local tomcat
删除数据卷
docker volume rm 数据卷名称
映射数据卷
如果数据卷不存在, docker会帮你自动创建(会将容器内部的文件映射出来)
docker run -v 数据卷名称:容器内部路径 镜像id
直接指定一个位置作为数据卷的存放位置(不会将容器内部的文件映射出来,里面是空的)
docker run -v 路径:容器内部路径 镜像id
Dockerfile
# Dockerfile 文件常用的内容
from 指定当前自定义镜像依赖的环境
copy 将相对路径下的内容复制到自定义镜像中
workdir 声名镜像的默认工作目录
cmd 需要指定的命令(在workdir下执行的,cmd可以写多个,只以最后一个为准)
制作镜像
docker build -t 镜像名称[:tag] .
Dockerfile安装nginx
FROM hub.c.163.com/public/centos:latest
RUN rpm --rebuilddb && yum -y install gcc zlib zlib-devel pcre pcre-devel tar wget
ADD nginx-1.16.1.tar.gz .
WORKDIR nginx-1.16.1
RUN ./configure --prefix=/usr/local/nginx && make && make install
WORKDIR /usr/local/nginx
EXPOSE 80
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
网友评论