You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					350 lines
				
				9.6 KiB
			
		
		
			
		
	
	
					350 lines
				
				9.6 KiB
			| 
											2 years ago
										 | [appendix] | ||
|  | = Docker 常用命令 | ||
|  | 详细的 Docker 使用指南,请参考 link:resources/files/docker_practice.pdf[《Docker - 从入门到实践》],以下仅列出一些常用命令。 | ||
|  | 
 | ||
|  | == docker 服务启停 | ||
|  | [source,bash] | ||
|  | ---- | ||
|  | # 启动 docker | ||
|  | service docker start | ||
|  | 
 | ||
|  | # 停止 docker | ||
|  | service docker stop | ||
|  | 
 | ||
|  | # 重新启动 docker | ||
|  | service docker restart | ||
|  | ---- | ||
|  | 
 | ||
|  | == 镜像加速器配置 | ||
|  | 国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。 | ||
|  | Docker 官方和国内很多云服务商都提供了国内加速服务,例如: | ||
|  | 
 | ||
|  | * Docker 官方提供的中国 registry mirror | ||
|  | * 阿里云加速器 | ||
|  | * DaoCloud 加速器 | ||
|  | 
 | ||
|  | === Windows 10 镜像加速器配置 | ||
|  | 对于使用 Windows 10 的用户,在系统右下角托盘 Docker 图标内右键菜单选择 Settings, | ||
|  | 打开配置窗口后左侧导航菜单选择 Docker Daemon。 | ||
|  | 编辑窗口内的 JSON 串,填写加速器地址,例如: | ||
|  | [source,json] | ||
|  | ---- | ||
|  | { | ||
|  | 	"registry-mirros" : [ | ||
|  | 		"https://registry.docker-cn.com" | ||
|  | 	] | ||
|  | } | ||
|  | ---- | ||
|  | 
 | ||
|  | 编辑完成,点击 Apply 保存后 Docker 服务会重新启动。 | ||
|  | 
 | ||
|  | === Mac OS X 镜像加速器配置 | ||
|  | 对于使用 Mac OS X 的用户,在任务栏点击 Docker for Mac 应用图标 --> Perferences... --> Daemon --> Registry mirrors。 | ||
|  | 在列表中填写加速器地址即可。修改完成后,点击 Apply & Restart 按钮,Docker 就会重新启动并应用配置的镜像地址了。 | ||
|  | 
 | ||
|  | === 检查加速器是否生效 | ||
|  | 配置加速器之后,如果拉取镜像仍然十分缓慢,请手动检查加速器配置是否生效,在命令行执行 | ||
|  | [source,bash] | ||
|  | ---- | ||
|  | docker info | ||
|  | 
 | ||
|  | #如果从结果中看到如下内容,说明配置成功。 | ||
|  | Registry Mirrors: | ||
|  |     https://registry.docker-cn.com/ | ||
|  | ---- | ||
|  | 
 | ||
|  | == 镜像操作 | ||
|  | === 获取镜像 | ||
|  | 在 Docker Hub 上有大量的高质量的镜像可以使用,这里我们就说一下怎么获取这些镜像。 | ||
|  | 
 | ||
|  | 从 Docker 镜像仓库中获取镜像的命令是 docker pull, 其命令格式为: | ||
|  | [source,bash] | ||
|  | ---- | ||
|  | docker pull [选项] [Docker Registry 地址[:端口号]/] 仓库名[:标签] | ||
|  | ---- | ||
|  | 
 | ||
|  | 具体的选项可以通过 docker pull --help 命令查看,这里我们说一下镜像名称的格式。 | ||
|  | 
 | ||
|  | * Docker 镜像仓库地址: 地址的格式一般是 <域名/IP>[:端口号],默认地址是 Docker Hub | ||
|  | * 仓库名:仓库名的格式一般是<用户名>/<软件名>。对于 Docker Hub,如果不给出用户名,默认为 library,也就是官方镜像。 | ||
|  | 
 | ||
|  | 以下给出一些示例: | ||
|  | [source,bash] | ||
|  | ---- | ||
|  | docker pull ubuntu:16.04			#从官方仓库中获取 ubuntu 16.04 镜像 | ||
|  | docker pull ibmcom/db2express-c		#从官方仓库中获取 ibm 公司提供的 db2express-c 最新版镜像 | ||
|  | ---- | ||
|  | 
 | ||
|  | === 列出镜像 | ||
|  | [source,bash] | ||
|  | ---- | ||
|  | docker image ls | ||
|  | ---- | ||
|  | 
 | ||
|  | === 删除镜像 | ||
|  | [source,bash] | ||
|  | ---- | ||
|  | docker image rm 镜像ID | ||
|  | ---- | ||
|  | 
 | ||
|  | === 镜像导出 | ||
|  | [source,bash] | ||
|  | ---- | ||
|  | docker save -o 导出文件名.tar 需要导出的镜像名 | ||
|  | ---- | ||
|  | 
 | ||
|  | 以下给出一些示例: | ||
|  | [source,bash] | ||
|  | ---- | ||
|  | docker save -o mysql.tar mysql | ||
|  | docker save -o oracle11g.tar sath89/oracle-ee-11g | ||
|  | ---- | ||
|  | 
 | ||
|  | === 镜像导入 | ||
|  | [source,bash] | ||
|  | ---- | ||
|  | docker load --input 导出文件名.tar | ||
|  | ---- | ||
|  | 
 | ||
|  | 以下给出一些示例: | ||
|  | [source,bash] | ||
|  | ---- | ||
|  | docker load --input mysql.tar | ||
|  | docker load --input oracle11g.tar | ||
|  | ---- | ||
|  | 
 | ||
|  | === 镜像构建 | ||
|  | [source,bash] | ||
|  | ---- | ||
|  | docker build [选项] <上下文路径/URL/> | ||
|  | ---- | ||
|  | 
 | ||
|  | 以下给出一些示例: | ||
|  | [source,bash] | ||
|  | ---- | ||
|  | # 采用当前目录作为构建上下文 | ||
|  | docker build -t nginx:v3 . | ||
|  |              ----------- - | ||
|  |              选项         上下文路径 | ||
|  | 
 | ||
|  | # 从 Git 仓库 URL 构建               | ||
|  | docker build https://github.com/twang2218/gitlab-ce-zh.git#:11.1 | ||
|  |              ---------------------------------------------  ---- | ||
|  |              git repo(默认master 分支)                       构建目录 | ||
|  |               | ||
|  | # 用给定的远程 tar 压缩包构建, 先下载解压再作为构建上下文 | ||
|  | docker build http://server/content.tar.gz | ||
|  | 
 | ||
|  | # 用给定的本地 tar 压缩包构建(支持文件格式: gzip, bzip2, xz) | ||
|  | docker build - <content.tar.gz | ||
|  | 
 | ||
|  | # 从标准输入中读取 Dockerfile 进行构建,这种构建没有构建上下文,不能进行 COPY 之类的操作 | ||
|  | docker build - < Dockerfile | ||
|  | # 或 | ||
|  | cat Dockerfile | docker build - | ||
|  | 
 | ||
|  | 
 | ||
|  | ---- | ||
|  | 
 | ||
|  | == 容器操作 | ||
|  | === 运行容器 | ||
|  | [source,bash] | ||
|  | ---- | ||
|  | docker run | ||
|  | 	--name gitlab \	//<1> | ||
|  | 	--restart always \	//<2> | ||
|  | 	-d \				//<3> | ||
|  |     -p 10443:443 \		//<4> | ||
|  |     -p 1080:80 \ | ||
|  |     -p 1022:22 \ | ||
|  |     -v /path/to/your/host/dir/volume/gitlab_v10/config:/etc/gitlab:Z \		//<5> | ||
|  |     -v /path/to/your/host/dir/volume/gitlab_v10/logs:/var/log/gitlab:Z \ | ||
|  |     -v /path/to/your/host/dir/volume/gitlab_v10/data:/var/opt/gitlab:Z \ | ||
|  |     gitlab/gitlab-ce:latest		//<6> | ||
|  | ---- | ||
|  | <1> 容器名称 | ||
|  | <2> 自动启动,即当 docker 启动后,容器就自动启动 | ||
|  | <3> 容器在后台以守护状态运行 | ||
|  | <4> 端口映射,格式: 本地主机端口:容器端口 | ||
|  | <5> 数据卷映射, 格式: 本地主机目录或文件:容器目录或文件 | ||
|  | <6> 镜像名称,格式: 仓库名[:标签] | ||
|  | 
 | ||
|  | === 创建容器 | ||
|  | 创建容器有两种方法,可以创建并启动,也可以只创建不启动,在解决容器相关问题时,此模式比较有意义。 | ||
|  | [source,bash] | ||
|  | ---- | ||
|  | # 创建容器,但不启动 | ||
|  | docker create --name 容器名称 镜像名称 | ||
|  | 
 | ||
|  | # 将容器的目录全部导出成 tar 文件 | ||
|  | docker export 容器名称 > 导出文件名.tar | ||
|  | 
 | ||
|  | # 解压 tar 文件后,可以查看容器完整的文件系统 | ||
|  | ---- | ||
|  | 
 | ||
|  | === 列出容器 | ||
|  | [source,bash] | ||
|  | ---- | ||
|  | docker container ls -a | ||
|  | ---- | ||
|  | 
 | ||
|  | === 列出当前正在运行的容器 | ||
|  | [source,bash] | ||
|  | ---- | ||
|  | docker ps | ||
|  | ---- | ||
|  | 
 | ||
|  | === 启动容器 | ||
|  | [source,bash] | ||
|  | ---- | ||
|  | docker container start 容器ID | ||
|  | ---- | ||
|  | 
 | ||
|  | === 停止容器 | ||
|  | [source,bash] | ||
|  | ---- | ||
|  | docker container stop 容器ID | ||
|  | ---- | ||
|  | 
 | ||
|  | === 删除容器 | ||
|  | [source,bash] | ||
|  | ---- | ||
|  | docker container rm 容器ID | ||
|  | ---- | ||
|  | 
 | ||
|  | === 进入容器 | ||
|  | [source,bash] | ||
|  | ---- | ||
|  | docker exec -it 容器ID bash | ||
|  | ---- | ||
|  | 
 | ||
|  | == 网络操作 | ||
|  | === 命令集 | ||
|  | [source,bash] | ||
|  | ---- | ||
|  | # 关于 docker network 相关命令 | ||
|  | docker network create | ||
|  | docker network connect | ||
|  | docker network ls | ||
|  | docker network rm | ||
|  | docker network disconnect | ||
|  | docker network inspect | ||
|  | ---- | ||
|  | 
 | ||
|  | === 创建网桥 | ||
|  | [source,bash] | ||
|  | ---- | ||
|  | # 创建名为 mynetwork 的网桥 | ||
|  | docker network create --driver bridge --subnet 172.18.0.0/16 mynetwork | ||
|  | ---- | ||
|  | 
 | ||
|  | === 查看网桥配置 | ||
|  | [source,bash] | ||
|  | ---- | ||
|  | # 查看名为 mynetwork 网桥的配置 | ||
|  | docker network inspect mynetwork | ||
|  | ---- | ||
|  | 
 | ||
|  | === 固定容器 IP 地址 | ||
|  | [source,bash] | ||
|  | ---- | ||
|  | # 在名为 mynetwork 网桥上固定 ip 地址启动容器 | ||
|  | docker run -d --name hdp -v /opt/docker/volume/nginx:/usr/share/nginx/html --network=hadoop --ip=172.18.0.100 nginx | ||
|  | ---- | ||
|  | 
 | ||
|  | === 将已有容器加入到网络 | ||
|  | [source,bash] | ||
|  | ---- | ||
|  | # 将已存在的 nginx 容器加入到 hadoop 网络中 | ||
|  | docker network conect hadoop nginx | ||
|  | ---- | ||
|  | 
 | ||
|  | === 容器访问宿主机IP | ||
|  | docker 18.03 加入了一个 feature,在容器中可以通过 host.docker.internal 来访问主机。 | ||
|  | 
 | ||
|  | == 数据卷操作 | ||
|  | === 创建卷 | ||
|  | [source,bash] | ||
|  | ---- | ||
|  | docker volume create xxx    # xxx 卷名称 | ||
|  | ---- | ||
|  | 
 | ||
|  | === 显示卷信息 | ||
|  | [source,bash] | ||
|  | ---- | ||
|  | docker volume inspect xxx   # xxx 卷名称 | ||
|  | 
 | ||
|  | # 执行结果如下: | ||
|  | [ | ||
|  |     { | ||
|  |         "CreatedAt": "2023-04-16T13:00:36Z", | ||
|  |         "Driver": "local", | ||
|  |         "Labels": {}, | ||
|  |         "Mountpoint": "/var/lib/docker/volumes/oracle/_data",   <1> | ||
|  |         "Name": "oracle", | ||
|  |         "Options": {}, | ||
|  |         "Scope": "local" | ||
|  |     } | ||
|  | ] | ||
|  | ---- | ||
|  | <1> 主机目录,如果是 mac OS 或 windows 下的 docker 时,通常是指虚拟机中的目录 | ||
|  | 
 | ||
|  | === 绑定卷到容器 | ||
|  | [source,bash] | ||
|  | ---- | ||
|  | docker run -d --name oracle -v volume-name:container-dir container-registry.oracle.com/database/express:21.3.0-xe | ||
|  |                                ----------- ------------- | ||
|  |                                卷名称       容器目录         <1> | ||
|  | ---- | ||
|  | <1> -v 参数既可以绑定卷到容器中,也可以绑定主机目录到容器中 | ||
|  | 
 | ||
|  | === 数据共享 | ||
|  | 如果要授权一个容器访问另一个容器的 Volume,我们可以使用 -volumes-from 参数来执行 docker run。 | ||
|  | [source,bash] | ||
|  | ---- | ||
|  | # 多个 oracle 实例共享一个卷中的数据 | ||
|  | docker run -d --name oracle2 --volumes-from oracle container-registry.oracle.com/database/express:21.3.0-xe | ||
|  |                                             ------ -------------------------------------------------------- | ||
|  |                                             共享卷  镜像名 | ||
|  | ---- | ||
|  | 
 | ||
|  | === 数据容器 | ||
|  | 常见的使用场景是使用纯数据容器来持久化数据库、配置文件或者数据文件等。 | ||
|  | [source,bash] | ||
|  | ---- | ||
|  | # 创建一个已经包含在 Dockerfile 里定义过 Volume 的 postgres 镜像,运行 echo 命令然后退出。 | ||
|  | # 当我们运行 docker ps 命令时,echo 可以帮助我们识别某镜像的用途。 | ||
|  | docker run --name dbdata postgres echo "Data-only container for postgres" | ||
|  | ---- | ||
|  | 
 | ||
|  | 用 -volumes-from 命令来识别其它容器的 Volume | ||
|  | [source,bash] | ||
|  | ---- | ||
|  | # 运行另外一个 postgres 数据库容器,且采用上面的数据容器中的卷 | ||
|  | docker run -d --volumes-from dbdata --name db1 postgres | ||
|  | ---- | ||
|  | 
 | ||
|  | 使用数据容器的两个注意点: | ||
|  | 
 | ||
|  | . 不要运行数据容器,这纯粹是在浪费资源。 | ||
|  | . 不要为了数据容器而使用“最小的镜像”,如 busybox 或 scratch,只使用数据库镜像本身就可以了。你已经拥有该镜像,所以并不需要占用额外的空间。 | ||
|  | 
 | ||
|  | === 卷备份 | ||
|  | 如果你在用数据容器,那做备份是相当容易的。 | ||
|  | [source,bash] | ||
|  | ---- | ||
|  | $ docker run --rm --volumes-from dbdata -v $(pwd):/backup debian tar cvf /backup/backup.tar /var/lib/postgresql/data | ||
|  |              ----                ------    ------ ------- ------ --------------------------------------------------- | ||
|  |              1                   2         3              4      5 | ||
|  | ---- | ||
|  | . --rm 表示容器在执行完毕后删除 | ||
|  | . 挂接到已有的数据卷 | ||
|  | . 挂接主机当前目录到容器的 /backup 目录 | ||
|  | . 运行的镜像名 | ||
|  | . 在启动的容器中执行 tar 命令,将 /var/lib/postgresql/data 目录压缩打包到 /backup/backup.tar 文件, | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 |