admin管理员组

文章数量:1531710

一、Docker安装


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

Docker官网

	https://docs.docker/

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

2. 安装官方yum源

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


3. 安装Docker引擎

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

4. 启动docker

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



二、Docker操作


1. 使用Docker镜像

1.1 获取镜像

命令:

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

Dockerhub:镜像的公共库

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

网址:https://hub.docker/

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

例如:

	docker pull mysql:5.7.30

注意:

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

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

命令:

	docker images

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

1.3 添加镜像标签

命令:

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

例如:

	docker tag mysql:5.7.30 mysql5

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

1.4 查看镜像详细信息

命令:

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

例如:

	docker inspect mysql:5.7.30

查看具体参数:

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

1.5 搜寻镜像

命令:

	docker search 名称

注意:

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

命令:

	docker  rmi  NAME[:TAG]

例如:

	docker rmi mysql:5.7.30
	docker rmi mysql5:latest

使用镜像ID删除镜像

	docker pull nginx

注意:

	如果有容器正在运行该镜像,则不能删除
	如果想强行删除用 -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 

2.2 启动容器

命令:

	docker start 容器id

例如:

	docker  start  0ab5ef79b786

2.3 查看容器状态

命令:

	docker ps 查看运行的容器

查看运行的容器

	docker ps

查看所有容器

	docker ps -a

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地址一样

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

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 start命令来重新启动

	docker start ce554267d7a4

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

	docker restart 090d67f05011

2.6 进入容器

命令:

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

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

例如:

	docker exec -it 090d67f05011 /bin/bash	

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

2.7 查看容器

命令:

	docker inspect [容器ID]

命令:

	docker stats [容器ID]

2.8 删除容器

命令:

	docker rm [容器ID]

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



3. 访问Docker仓库

Docker Hub是最大的公共镜像仓库(https://hub.docker/)
在公共仓库中注册一个账号,每ID可以免费拥有1个私有镜像

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/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 :后台运行

访问MySQL

	mysql -h192.168.80.60 -uroot -proot


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

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

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

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

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


4.3 Nginx

新建并启动Nginx容器

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

访问nginx


4.4 Redis

新建并启动Redis容器

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

访问Redis

注意:

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

解决:

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



5. Docker命令图谱

本文标签: 容器操作技术Docker