一、Docker安装


Docker在主流的操作系统和云平台上都可以使用,包括Linux操作 系统(如Ubuntu、Debian、CentOS、Redhat等)、MacOS操作系统和 Windows操作系统,以及AWS等云平台。

Docker官网

https://docs.docker.com/

1. 卸载历史版本

# 查看安装
	yum list installed | grep docker

# 卸载 (如果没有安装过,直接跳过卸载步骤)
	yum -y remove containerd.io.x86_64
	yum -y remove docker-ce.x86_64
	yum -y remove docker-ce-cli.x86_64

# 删库
	rm -rf /var/lib/docker

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_tomcat

2. 安装官方yum源

# 安装utils,config-manager在utils中
	yum install -y yum-utils   
	
# 安装官方yum源
	yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_tomcat_02


虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_redis_03

3. 安装Docker引擎

# 安装Docker引擎
	yum install -y docker-ce docker-ce-cli containerd.io

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_docker_04

4. 启动docker

# 开机启动
	systemctl enable docker
# 启动
	systemctl start docker
# 查看Docker状态
	docker info

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_mysql_05




二、Docker操作


1. 使用Docker镜像

1.1 获取镜像

命令:

docker pull NAME[:TAG] (如果tag不指定,则默认拉取最新的镜像)

Dockerhub:镜像的公共库

描述一个镜像需要包括“名称+标签”信息

网址:https://hub.docker.com/

可以选择注册一个账户
	不注册也可以进行镜像的拉去操作,但是不能上传

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_tomcat_06

例如:

docker pull mysql:5.7.30

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_系统安装_07

注意:

如果不显式指定TAG,则默认会选择latest标签,这会下载仓库中最新版本的镜像。
	
	镜像的仓库名称中还应该添加仓库地址(即registry,注册服务器)作为前缀,
		默认使用的是DockerHub服务,该前缀可以忽略

	完整的命令格式:
		docker pull registry.hub.docker.com/mysql:5.7.30
		如果从非官方的仓库下载,则需要在仓库名称前指定完整的仓库地址
1.2 查看镜像信息

命令:

docker images

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_mysql_08

可以通过man docker-images查看更多命令参数

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_docker_09

1.3 添加镜像标签

命令:

docker tag [原镜像名:tag号] [目标镜像名:tag号]     # 如果tag号缺省,默认latest

例如:

docker tag mysql:5.7.30 mysql5

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_mysql_10

其实就是相同的一个image,设置了两个tag

1.4 查看镜像详细信息

命令:

docker inspect NAME[:TAG]
	返回的是一个JSON格式的消息,如果我们只要其中一项内容时, 可以使用参数-f来指定

例如:

docker inspect mysql:5.7.30

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_mysql_11

查看具体参数:

docker inspect mysql:5.7.30 -f  {{".属性名称"}}

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_mysql_12

1.5 搜寻镜像

命令:

docker search 名称

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_docker_13

注意:

dockerhub仓库镜像, 私有仓库无法搜索到
1.6 删除镜像

命令:

docker  rmi  NAME[:TAG]

例如:

docker rmi mysql:5.7.30
	docker rmi mysql5:latest

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_系统安装_14

使用镜像ID删除镜像

docker pull nginx

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_tomcat_15

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_mysql_16

注意:

如果有容器正在运行该镜像,则不能删除
	如果想强行删除用 -f (不推荐)
1.7 上传镜像

命令:

docker push NAME[:TAG]

注意:

上传镜像到仓库,默认上传到Docker Hub官方仓库(需要登录)




2. 操作Docker容器

2.1 创建容器

命令:

docker create NAME[:TAG]

	可以加选项参数
		-i 交互模式
		-t 伪终端
		-d 后台运行
		-rm 容器退出后是否自动删除

例如:

docker create -it nginx

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_redis_17

2.2 启动容器

命令:

docker start 容器id

例如:

docker  start  0ab5ef79b786

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_tomcat_18

2.3 查看容器状态

命令:

docker ps 查看运行的容器

查看运行的容器

docker ps

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_系统安装_19

查看所有容器

docker ps -a

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_redis_20

2.4 新建并启动容器

命令:

docker run NAME[:TAG]
	相当于 docker create + docker start

	可以加选项参数
		--network host 使用宿主机IP地址
		man docker run
		docker run --help

例如:

docker run -it --rm --network host  nginx
	--rm  容器停止后自动卸载
	--it  交互式
	--network host  容器ip地址和宿主机ip地址一样

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_mysql_21

ctrl+c退出,容器停止,因为配置了rm,因此容器被移除

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_系统安装_22

2.5 终止容器

命令:

docker stop 容器id -t 时间 (默认10秒)

	首先向容器发送SIGTERM信号,等待一段超时时间(默认为10 秒)后,
		再发送SIGKILL信号来终止容器

	docker kill 容器id
	docker kill 命令会直接发送SIGKILL信号来强行终止容器

例如:

# 后台 启动容器
		docker run -it --rm -d --network host  nginx 
	
	# -t  定时5s后关闭容器
		docker stop 5c1ba38c3a45  -t 5 
		
	# 强制终止容器    
		docker kill 5c1ba38c3a45

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_tomcat_23

处于终止状态的容器,可以通过docker start命令来重新启动

docker start ce554267d7a4

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_redis_24

docker restart命令会将一个运行态的容器先终止,然后再重新启动

docker restart 090d67f05011

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_tomcat_25

2.6 进入容器

命令:

docker exec -it [容器ID] /bin/bash

	早期有attach命令,对于阻塞命令会等待,所以不方便
	在Docker 1.3.0后提供了exec 可以在容器内直接执行任意命令

例如:

docker exec -it 090d67f05011 /bin/bash

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_mysql_26

无论在容器内进行何种操作,依据依据镜像创建的其他容器都不会受影响(由于namespace的隔离)(将数据持久化的除外) exec: 容器执行某操作,操作为容器ID后边的命令 -it: 以伪终端模式,这样我们就相当于进入到容器中了

2.7 查看容器

命令:

docker inspect [容器ID]

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_mysql_27

命令:

docker stats [容器ID]

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_mysql_28

2.8 删除容器

命令:

docker rm [容器ID]

docker rm命令只能删除处于终止或退出状态的容器,并不能删除还处于运行状态的容器
要直接删除一个运行中的容器,可以添加-f参数。Docker会先 发送SIGKILL信号给容器,终止其中的应
用,之后强行删除

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_系统安装_29




3. 访问Docker仓库

Docker Hub是最大的公共镜像仓库(https://hub.docker.com/)

在公共仓库中注册一个账号,每ID可以免费拥有1个私有镜像

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_docker_30

3.1 登录仓库

docker login -u username -p password
默认登陆的是docker hub

[root@localhost ~]# docker login -u 账号  -p  密码
	
	WARNING! Using --password via the CLI is insecure. Use --password-stdin.
	WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
	Configure a credential helper to remove this warning. See
	https://docs.docker.com/engine/reference/commandline/login/#credentials-store
	Login Succeeded

登录成功的用户可以上传个人制造的镜像。

用户无需登录即可通过docker search命令来查找官方仓库中的镜 像,并利用docker pull命令来将它下载到本地

3.2 登出仓库

docker logout
可以同时登陆多个docker仓库,因此此命令一般不执行

[root@localhost ~]# docker logout
	Removing login credentials for https://index.docker.io/v1/
3.3 认证文件

Mac/Win机器上的是隐藏密码的,但是在Linux下是显示密码的,只不过进行了base64编码, 只要拷贝
此文件到其他机器指定目录下(/root/.docker/config.json)即可免登录

{
	    "auths": {
	        "https://index.docker.io/v1/": {
	            "auth": "Z2F2aW5saTgwczpsanAxMjM0NjU="
	       }
	   },
	    "HttpHeaders": {
	        "User-Agent": "Docker-Client/19.03.12 (linux)"
	   }
	}




4. 常用软件的容器化部署

4.1 Mysql

新建并启动mysql容器

docker pull mysql:5.7.30  # 拉取镜像操作可以省略
	docker run  --network host  -e MYSQL_ROOT_PASSWORD=root -d --rm mysql:5.7.30
	
	# 参数
		--network host : 宿主机IP 不能再使用端口映射 -p 宿主机端口:容器端口 只能使用容器端口
		--rm:当容器停止后,对容器及其申请的卷执行删除操作
		-e key=value: 指定环境变量(此处指定了mysql root密码的环境变量,密码为root)
		-d :后台运行

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_系统安装_31

访问MySQL

mysql -h192.168.80.60 -uroot -proot

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_mysql_32


4.2 Tomcat

新建并启动Tomcat容器

docker pull tomcat:8.5.56-jdk8-openjdk      # 拉取镜像操作可以省略(这是一个带着jdk的tomcat)
	docker run -it --rm --network host tomcat:8.5.56-jdk8-openjdk

	-it : 交互式伪客户端
	--rm:当容器停止后,对容器及其申请的卷执行删除操作
	--network host:宿主机IP

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_redis_33

访问tomcat,报错,找不到资源(因为此时安装的Tomcat没有提供默认 的欢迎页面)

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_redis_34


浏览器访问也访问不到默认的欢迎页面

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_mysql_35

解决:进入到容器中,创建项目

进入到运行中的容器:tomcat:8.5.56-jdk8-openjdk
	创建项目目录:webapps
	创建测试项目:dabing-project
	在测试项目中创建欢迎页面:index.html
	访问测试项目中的欢迎页面

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_mysql_36


4.3 Nginx

新建并启动Nginx容器

docker pull nginx         # 拉取镜像操作可以省略
	docker run --name nginx1  --network host -d nginx
	
	--name:运行的容器名称

访问nginx

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_mysql_37


4.4 Redis

新建并启动Redis容器

docker pull redis:5.0.9
	docker run  --network host -d redis:5.0.9

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_redis_38

访问Redis

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_mysql_39


注意:

如果宿主机也运行着redis,容器中的redis将无法启动,因为6379端口被占用了

解决:

将容器的6379端口转换成其他端口,就不会造成端口冲突了

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_docker_40




5. Docker命令图谱

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_系统安装_41

虚拟机使用docker安装nacos登录失败 虚拟机中安装docker_docker_42