1.Docker的概述
用Go语言实现的开源应用项目(container);克服操作系统的笨重;快速部署;只隔离应用程序的运行时环境但容器之间可以共享同一个操作系统;Docker通过隔离机制,每个容器间是互相隔离,每个容器内都有一个属于自己的文件系统,互不影响
2.重要概念
- dockerfile
- image
- container
实际上你可以简单的把image理解为可执行程序,container就是运行起来的进程。
那么写程序需要源代码,那么“写”image就需要dockerfile,dockerfile就是image的源代码,docker就是"编译器"。
因此我们只需要在dockerfile中指定需要哪些程序、依赖什么样的配置,之后把dockerfile交给“编译器”docker进行“编译”,也就是docker build命令,生成的可执行程序就是image,之后就可以运行这个image了,这就是docker run命令,image运行起来后就是docker container。
基本组成:镜像 image、容器 container、仓库 repository(共有/私有;存放镜像的地方)
3.docker命令
docker version # 显示docker的版本信息
docker info # 显示docker的系统信息
镜像命令
docker images # 查看所有本地的主机上的镜像
docker search 镜像名 # 搜索镜像
docker pull 镜像名[:tag] # 下载镜像如果不写tag,默认就是latest
docker rmi -f 镜像ID # 删除指定的镜像
docker rmi -f $(docker images -aq) # 删除全部的镜像
容器命令(有了镜像才可以创建容器,直接run就是先创建再启动)
docker run [可选参数] 镜像ID
参数说明
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
-m :设置容器使用内存最大值;
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
--link=[]: 添加链接到另一个容器;
--expose=[]: 开放一个端口或一组端口;
--volume , -v: 绑定一个卷
例如
docker run -it centos /bin/bash
从容器中退回主机
exit # 直接停止容器并退出
Ctrl + P + Q # 不停止容器但退出
docker ps # 列出当前正在运行的容器
可选项
-a # 列出当前正在运行的容器+带出历史运行的容器
-n=数字 # 显示最近创建的容器
-q # 只显示容器的编号
删除容器
docker rm 容器ID # 删除指定的容器,不能删除正在运行的容器
docker rm -f 容器ID # 强制删除指定的容器
docker rm -f $(docker ps -aq) # 删除全部的容器
docker ps -aq | xargs docker rm # 删除全部的容器
启动和停止容器的操作
docker start 容器ID # 启动容器
docker start -i 容器ID # 启动一个已停止的容器,并进入交互界面
docker restart 容器ID # 重启容器
docker stop 容器ID # 停止当前正在运行的容器
docker kill 容器ID # 强制停止当前容器
后台启动容器
docker run -d 镜像名
查看日志
docker logs -tf --tail 数字 容器ID
可选项
-tf # 显示日志
--tail 数字 # 显示的日志的条数
docker run -d centos /bin/sh -c "while true;do echo hello world;sleep 1;done"
docker logs -tf --tail 10 容器ID # 显示10条日志
docker logs -tf --tail 10 容器ID # 显示所有日志
Ctrl + C # 停止输出日志
查看容器中的进程信息
docker top 容器ID
查看镜像元数据
docker inspect 容器ID
进入当前正在运行的容器
docker exec -it 容器ID /bin/bash # 进入容器后开启一个新的终端,可以在里面操作(常用)
参数说明:
-d :分离模式: 在后台运行
-i :即使没有附加也保持STDIN 打开
-t :分配一个伪终端
文件是在容器内创建的,命令是在主机上执行的。
在容器内时,可以exit退出,因为容器内的文件存在与否和容器是否正在运行没关系。
docker cp 容器ID:容器内路径 目的主机路径
从主机上拷贝文件到容器内
docker cp 源主机路径 容器ID:容器内路径
拷贝是一个手动过程,未来我们使用“-v”卷的技术,可以实现自动同步
修改容器内存
docker stats 容器ID
Ctrl + C退出
docker update --memory 2G --memory-swap -1 容器ID
mac系统无法设置超过2GiB的内存,Linux系统可以设置为系统能提供的最大内存
4.centos8安装docker
把image理解为可执行程序,container就是运行起来的进程。dockerfile就是image的源代码,docker就是"编译器"
--1.更新国内源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
yum clean all && yum makecache
--2.卸载旧版本的docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
--3.增加源
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
--4.安装docker(docker的引擎、操作docker的客户端、docker容器)
--先卸载低版本的runc,要不安装的时候会报错版本低冲突
yum -y remove runc
sudo yum install docker-ce docker-ce-cli containerd.io
--5.启动docker服务,查看是否成功
sudo systemctl start docker
sudo systemctl enable docker
----客户查看docker的版本,也确保一下安装是否成功
docker -v
----查看有没有下载的镜像images
----因为是新安装的docker,所以是空列表
docker images
--6.配置docker应用镜像加速
--/etc/docker这个目录加入没有的话就自己创建一个
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://kru7klna.mirror.aliyuncs.com"]
}
EOF
重新加载
sudo systemctl daemon-reload
sudo systemctl restart docker