Docker常用指令笔记
目录
0.Docker核心概念
在上篇分享中,我们聊到 Docker是一种沙盒技术,Docker容器的本质其实是一个特殊的Linux进程。它被Namespace做了隔离,资源被cgroup做了限制,
并且能看到的文件系统,也被rootfs做了手脚。那这个容器又是如何启动起来的?隔离限制的幕后操作者又是谁? 这就涉及到下面几个名称:
- docker宿主机: 安装了Docker程序的机器(Docker直接安装在操作系统之上);
- docker程序
- docker仓库(Registry):用来保存各种打包好的软件镜像;
- docker镜像(Images):软件打包好的镜像;放在docker仓库中;
- docker容器(Container):镜像启动后的实例称为一个容器;容器是独立运行的一个或一组应用
宿主机,我们很好理解,它是一个Linux机器,可以是虚拟机,但一定是Linux,因为我们谈到的Namespace等实现docker的技术,是Linux内核才有的特性。所以基于windows或者mac的docker实际上是基于一个虚拟机。docker程序,没错,就是它负责接收我们的一些docker命令,然后帮助我们创建容器,做相关的所有工作。docker镜像,就是为不同应用制作的模板,可以利用镜像快速启动容器,很多常用的镜像,比如mysql,nginx等等,在docker.hub(docker官方的镜像仓库)都有现成的镜像,你只需要拉取下来使用即可。docker容器和镜像的关系就像是,模板与实例的关系。一个镜像可以启动多个实例。
有了docker,你安装一个nginx软件只需要下面几个命令:
docker pull nginx
docker run --name mynginx -p 8080:80 -d nginx
现如今,几乎所有的软件厂商,都会为自己的应用制作Docker镜像,所以基于Docker安装的方式,让你根本不用关心软件内部的配置细节,你只需要给我一个打包好的镜像,然后我执行一句docker run即可。Docker镜像成了新的交付形式。特别是镜像的分层设计,镜像仓库等管理方式是广大开发者早已熟悉的工作模式(比如maven仓库,npm仓库,git版本管理),所以Docker成了容器事实上的标准。
1.安装Docker
1.1.安装Docker
Docker分为ce 个人,ee企业
#1.更新yum
sudo yum update -y
#2.卸载旧版本docker(如果没有,跳过)
sudo yum remove docker docker-common docker-selinux docker-engine
#3.安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
#4.设置docker yum源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#如果上边的源速度有问题,可以利用阿里镜像加速
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#5.安装docker由于repo中默认只开启stable仓库,故这里安装的是最新稳定版
sudo yum install docker-ce
#6.启动 设为开机启动,并查看状态
systemctl start docker && \
systemctl enable docker &&\
systemctl status docker
如果之前安装过,卸载不干净,会出现冲突,根据提示卸载对应的就可:
yum erase docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
如果想安装具体版本:用下面命令
#1、可以查看所有仓库中所有docker版本,并选择特定版本安装
yum list docker-ce --showduplicates | sort -r
#2.安装指定版本
yum install docker-ce-19.03.9-3.el7
第一句查看版本的结果如下,安装命令要注意需要拼接成上面的形式,去掉x86以及3:等。
docker-ce.x86_64 3:19.03.10-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.0-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.9-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.8-3.el7 docker-ce-stable
1.2.删除Docker
docker info #查看docker信息
yum list installed | grep docker #查看docker安装信息
yum remove docker-ce.x86_64 ddocker-ce-cli.x86_64 -y #删除
#完全删除
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
rm -rf /etc/systemd/system/docker.service.d
rm -rf /var/lib/docker
rm -rf /var/run/docker
2.Docker常用命令
2.1.镜像操作
操作 | 命令 | 说明 |
---|---|---|
检索 | docker search 关键字 eg:docker search redis | 我们经常去docker hub上检索镜像的详细信息,如镜像的TAG。 |
拉取 | docker pull 镜像名:tag | :tag是可选的,tag表示标签,多为软件的版本,默认是latest |
列表 | docker images | 查看所有本地镜像 |
删除 | docker rmi image-id | 删除指定的本地镜像 |
导出 | docker save -o xx.tar yourImage | 将某个镜像导出为一个 tar文件,可以复用 |
导入 | docker load xx.tar | 导入某个镜像文件xx.tar,此时镜像列表就有该镜像 |
示例:拉取一个nginx镜像,版本号默认使用latest
[root@node1 docker]# docker pull nginx
[root@node1 nginx]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest f6987c8d6ed5 4 days ago 141MB
ceph/daemon latest 2e1ed6c0f434 2 years ago 942MB
ubuntu latest 775349758637 2 years ago 64.2MB
redis latest de25a81a5a0b 2 years ago 98.2MB
ipfs/go-ipfs latest 953c7f0ef4d8 2 years ago 51.5MB
centos centos7.5.1804 cf49811e3cdb 2 years ago 200MB
此时通过docker images就可看到nginx镜像
2.2.容器操作
操作 | 命令 | 说明 |
---|---|---|
创建并启动 | docker run –name nginx -d nginx:latest | 根据镜像nginx:latest启动一个名叫nginx的容器 |
查看容器列表 | docker ps [-a] | 查看启动的容器列表,加 -a 可以查看所有,包括停止的容器 |
停止 | docker stop 容器id | 停止某个容器,id可以只写前缀几个字母,只要能区分即可以,不用写全 |
启动 | docker start 容器id | 启动某个被停止的容器 |
删除 | docker rm 容器id | 删除某个容器,必须要先停止容器 |
查看荣器详情 | docker inspect 容器id | 查看摸个容器详细信息 |
查看日志 | docker logs 容器id | 查看某个容器的运行日志 |
示例:通过刚才获取的nginx镜像运行一个nginx容器。
[root@node1 docker]# docker run --name nginx-test -p 8080:80 -d nginx
26048046db4838582b009322972d06230f3cb31b244665a627b31db5187ed030
- –name 用来命名容器,
- -p 宿主机端口:容器端口 端口映射
- -d 后台运行
- nginx 镜像名称,一般要跟上版本号, 这里因为拉取镜像采用latest,所以可以省略版本号
下面那一串就是容器的id, 此时查看容器
[root@node1 docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
26048046db48 nginx "/docker-entrypoint.…" 4 seconds ago Up 4 seconds 0.0.0.0:8080->80/tcp nginx-test
此时nginx即可 访问
进入容器内部:通过exec就可以进入容器, 这里26就是容器id的前缀,可以不用写全。
[root@node1 docker]# docker exec -it 26 /bin/bash
root@26048046db48:/# ls
bin boot dev docker-entrypoint.d docker-entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@26048046db48:/# cd /usr/local/
root@26048046db48:/usr/local# ls
这里 -it是告诉容器,启动后分配一个输入输出环境(-i即stdin, -t 即tty) 可以直接认为 tty 就是 Linux 给用户提供的一个常驻小程序,用于接收用户的标准输入,返回操作系统的标准输出。当然,为了能够在 tty 中输入信息,你还需要同时开启 stdin(标准输入流).
这里整个命令就是,进入容器,分配一个输入和输出环境,并且启动bash程序。
3.镜像加速
Docker 默认远程仓库:https://hub.docker.com/
我们要是从这个默认仓库下载镜像,速度是特别低慢,就几十 kb 每秒的那种;由于是国外主机,类似 Maven 仓库,经常延迟,破损;
所以我们一般都是配置国内镜像,比如阿里云镜像,稳定点;
阿里云提供了镜像加速服务,只要登录账号,就可以免费获取。
配置步骤:
1.登录阿里云账号,找到镜像加速服务
2.安照要求执行对应的命令即可
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
3.小结
文中分享了Docker的一些核心概念,并记录了一些常用的命令,把实际使用中值得注意的点做了记录,所以涵盖了从安装到使用等一系列问题。所以并非一篇入门教程,而更像是一个学习手册。
文中关于nginx的例子,还有很多优化点,比如我的数据持久化如何做?如何方便配置?等等这些问题,后续接着分享。