二、Docker基本命令:
Docker支持CentOs 6 及以后的版本;
CentOs7系统可以直接通过yum进行安装,安装前可以
1、查看一下系统是否已经安装了Docker:
yum list installed | grep docker
2、安装docker:
yum install docker -y
-y 表示自动确认,中途就不需要确认了,安装成功如下:
3、卸载docker:
把这三个都卸载掉:
4、查看docker版本:
docker --version / docker -v
5、安装之后启动Docker服务:
systemctl start docker 或者 service docker start
6、停止:
systemctl stop docker 或者 service docker stop
7、重启:
systemctl restart docker 或者 service docker restart
8、检查docker进程的运行状态:
systemctl status docker 或者 service docker status
9、查看docker进程:
ps -ef | grep docker
10、查看docker系统信息:
docker info
11、查看所有的帮助信息:
docker
12、查看某个commond命令的帮助信息:
docker commond --help
13、设置开机启动docker:
systemctl enable docker
三、Docker的使用初体验
3.1、Docker的运行机制:
我们知道Docker并不是容器,而只是一个管理容器的引擎;
Docker的底层运行原理:
Docker服务启动→下载镜像→启动该镜像得到一个容器→容器里运行着我们想要的程序;
我们在linux命令行操作时实质上相当于是docker引擎的客户端client,我们通过客户端发送一些指令,发送给docker daemon(docker里面核心的底部引擎),发送给它之后,docker容器引擎开始解析,首先它会去本地里找有没有这个镜像,如果有的话就直接启动起来这个镜像,得到对应的容器,程序就运行在容器里面;本地仓库没有这个镜像的话就去Registry仓库里找,去下载镜像,Registry是一个仓库,找到之后它就会下载。
3.2、 配置Docker镜像加速器
默认情况下,将从docker hub(https://hub.docker.com/)上下载docker镜像,现在已经访问不了,所以配置一下镜像加速器:
中科大镜像加速器(https://docker.mirrors.ustc.edu.cn)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["镜像加速地址"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
# 示例
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
3.3、 Docker 镜像相关命令
1、搜索镜像:
从网络中查找需要的镜像:docker search 镜像名称
例如: docker search tomcat 搜索tomcat镜像
2、下载镜像:
从Docker 仓库下载镜像到本地,镜像名称格式为 名称号:版本号
,如果版本号不指定则是最新的版本。如果不知道镜像版本,可以去docker hub 搜索对应镜像查看。如果你反复执行pull,它会把这个镜像下载到最新版本。
docker pull 镜像名称
例如:docker pull tomcat
3、运行镜像:
docker run tomcat 前台运行,前台运行的话 ctrl+c就可以关掉了
docker run tomcat -d 后台运行,加参数-d
docker run 镜像的ID号 -d
docker run 名称号:版本号 -d
docker run tomcat 报这个错:
Cannot find /usr/local/tomcat/bin/setclasspath.sh
解决方案:先下载docker pull tomcat:9.0.56,然后docker run -d tomcat:9.0.56
镜像启动后你就得到了一个容器,通过ps-ef | grep tomcat查看,检查tomcat镜像是否启动容器成功:
4、显示本地已有的镜像:
docker images
docker images -q #查看所有镜像的id
在列出信息中,可以看到几个字段信息:
- REPOSITORY:来自于哪个仓库,比如docker.io/tomcat
- TAG:镜像的标记,比如latest
- lMAGE ID:镜像的ID号(每一个镜像都有一个唯一的ID)
- CREATED:创建时间,表示你这个镜像官方是在什么时候创建的
5、删除镜像:删除本地镜像
docker rmi 镜像id/名称号:版本号 #删除指定本地镜像
docker rmi 'docker images -q' #删除所有本地镜像注意是rmi,不是rm,rm是删除容器
6、查看当前运行的容器:
docker ps
- CONTAINER ID: 容器的ID
- IMAGE : 容器是通过什么镜像运行的(是通过Tomcat镜像运行的)
- COMMAND: 运行的命令是catalina.sh run
- CREATED: 容器是什么时候启动的
- STATUS: 运行状态(运行了三小时)
- PORTS : 端口是8080(也就是容器里面的Tomcat端口是8080)
- NAMES:容器的名称,这个名字是docker引擎自动生成的
7、如何关闭/停止容器:
docker stop 容器ID/容器的名称
注意:启动镜像用的是镜像名字或者镜像ID!!!镜像启动后你就得到了一个容器,但是关闭容器实用的容器名字或容器ID
8、这两个命令都可以查看容器是否在运行:
ps -ef | grep tomcat docker ps
9、查看所有的容器:
docker ps -a
docker ps只是查看运行着的容器
10、启动容器的两种方式:
启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态的容器重新启动。
通过镜像启动容器: docker run -d redis
docker run 镜像的ID号 -d
docker run 名称号:版本号 -d
端口映射:docker run -d -p 8080:8080 tomcat:9.0.56
已经停止的容器,我们可以使用命令docker start来启动。
开启容器:
docker start 容器id或容器名称
因为Docker的容器实在太轻量级了,很多时候用户都是随时删除和新建容器
11、删除容器:
docker rm 容器id或容器名称
删除容器时,容器必须是停止状态,否则会报错;删除所有容器 :docker rm $(docker ps -aq)
12、进入容器内部:
docker exec -it 容器id或容器名称 bash
13、查看容器的更多信息:
docker inspect +容器id或容器名称
14、查看运行着的容器id:
docker ps -q
15、查看所有容器id (包括未运行的容器的id):
docker ps -aq
16、停用全部运行中的容器:
docker stop $(docker ps -q)
docker ps -q 查看运行着的容器id docker images -q #查看所有镜像的id
docker ps --help 查看参数说明
17、删除所有容器:
docker rm $(docker ps -aq)
18、一条命令实现停用并删除容器:
docker stop $(docker ps -q)& docker rm -f $(docker ps -aq)
-f 表示强制移出,一定要加上
3.4、Docker的网络访问机制:
tomcat镜像启动后你就得到了一个容器,通过ps-ef | grep tomcat查看进程,tomcat镜像启动容器成功:
但是这个Tomcat不是直接运行在Linux上,而是运行在docker容器中,当然本身也在Linux上,Linux上有一个容器,容器里有一个Tomcat。
理论上我们应该可以去访问这个Tomcat,我们如果是在虚拟机Linux里面运行着一个Tomcat,那我们可以在浏览器输入IP+端口可以去访问,tomcat的默认端口是8080,但是我们现在访问失败:
如何去访问Docker中的tomcat呢,这就涉及到了Docker的网络机制 :
- 容器内的网络服务和外部机器不能直接通信
- 外部机器和宿主机可以直接通信
- 宿主机和容器可以直接通信
- 当容器中的网络服务需要被外部机器访问时,可以将容器中提供服务的端口映射到宿主机的端口上。外部机器访问宿主机的端口,从而间接访问容器的服务
- 这种操作称为:端口映射
从客户机上访问容器,需要有端口映射,docker容器默认采用桥接模式与宿主机通信,需要将宿主机的ip端口映射到容器的ip端口上;
现在我们的浏览器中输入ip+端口 要去访问,我们不能直接访问docker里面的Tomcat,用户在访问的时候首先肯定是访问的Linux,这个Linux然后要转发到Tomcat里面去,我们需要Tomcat和当前Linux做一个端口映射,然后就可以转发进去了。
docker容器里面的Tomcat的网络通讯与Linux本身采用一种网络桥接模式来通讯的,桥接模式通讯,我们就需要基于一个端口映射才可以让我们访问到docker容器里面的Tomcat。
具体操作如下:
1、我们先关闭tomcat容器: docker stop 215e46e97685
2、关闭容器后,重新启动容器:docker run -d -p 8080:8080 tomcat:9.0.56
加上参数-p,意思是把你当前Linux上的某一个端口映射到容器里面的某一个端口,这样就可以实现端口映射:我们浏览器访问Linux里面的8080,然后Linux里的8080转发到容器里的8080,这样我们就可以实现访问了
3、我们再来查看一下运行着的容器 : docker ps
tomcat进程正在运行: ps -ef | grep tomcat
总结:docker ps ps -ef | grep tomcat 这两种方式都可以查看tomcat是否在运行。
4、我们现在再来访问试试:
3.5、进入docker容器内部:
前面我们已经把Tomcat镜像启动了,接下来我们进入Docker容器,看一下容器里面有一些什么东西:
进入容器: 打开一个标准的输入流分配到一个虚拟的控制台,然后在这个控制台上执行bash就可以进入docker容器的命令行。简单点其实就是进入docker容器的命令行
docker exec -it 容器id bash
- 其中i表示交互式的、保持标准输入流打开;
- t表示虚拟控制台,分配到一个虚拟控制台;
- bash:linux的shell命令
docker exec -it 8fca7219b9a8 bash:
退出容器:exit
以redis为例: