Docker常用命令
一、Docker基本操作
Docker官方建议在Ubuntu中安装,因为Docker是基于Ubuntu发布的,而且一般Docker出现的问题Ubuntu是最先更新或者打补丁的。在很多版本的CentOS中是不支持更新最新的一些补丁包的(如果非要使用CentOS的话建议最好7.x或以上版本)。
使用yum命令在线安装:
yum -y install docker
查看Docker的版本:
docker -v
Docker的启用和停止:
启动docker:systemctl start docker
停止docker:systemctl stop docker
重启docker:systemctl restart docker
查看docker状态:systemctl status docker
开机启动:systemctl enable docker
查看docker概要信息:docker info
查看docker帮助文档:docker --help
//PS:systemctl命令是系统服务管理器指令,它是 service 和 chkconfig 两个命令组合。
二、Docker镜像操作
Docker镜像是由文件系统叠加而成(是一种文件的存储形式)。最底端是一个文件引导系统,即bootfs,这很像典型的Linux/Unix的引导文件系统。Docker用户几乎永远不会和引导系统有什么交互。实际上,当一个容器启动后,它将会被移动到内存中,而引导文件系统则会被卸载,以留出更多的内存供磁盘镜像使用。Docker容器启动是需要的一些文件,而这些文件就可以称为Docker镜像。
列出镜像:
docker images
含义:
REPOSITORY:镜像所在的仓库名称
TAG:镜像标签
IMAGE ID:镜像ID
CREATED:镜像的创建日期(不是获取该镜像的日期)
SIZE:镜像大小
这些镜像都是存储在Docker宿主机的/var/lib/docker目录下
运行镜像:
docker run --name 标签名字 –i –t 镜像所在仓库名称 /bin/bash
例如:
docker run --name custom_container_name –i –t docker.io/ubunto:12.04 /bin/bash
表明从镜像Ubuntu:12.04启动一个容器,而这个镜像的操作系统就是Ubuntu:12.04。在构建容器时指定仓库的标签为custom_container_name 。
搜索镜像:
docker search 镜像名称
例如
docker search tomcat含义:
NAME:仓库名称
DESCRIPTION:镜像描述
STARS:用户评价,反应一个镜像的受欢迎程度
OFFICIAL:是否官方
AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的
拉取镜像
docker pull 镜像名称[:版本号]
# 例如: docker pull centos:7
注意:
镜像仓库: https://hub.docker.com/
目前国内访问docker hub速度上有点尴尬,推荐使用docker Mirror。现有国内提供docker镜像加速服务的商家有不少,下面说一下ustc镜像。ustc是老牌的linux镜像服务提供者了,还在遥远的ubuntu 5.04版本的时候就在用。ustc的docker镜像加速器速度很快。ustc docker mirror的优势之一就是不需要注册,是真正的公共服务。
地址:https://mirrors.ustc.edu.cn/help/
使用ustc镜像步骤:
(1) 编辑该文件:vi /etc/docker/daemon.json
PS: 如果该文件不存在就手动创建;另外有可能如果没有vim 命令则使用vi命令即可。
(2) 在该文件中输入如下内容:
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
还有本地阿里云的镜像地址,速度更快
{
"registry-mirrors": ["https://alzgoonw.mirror.aliyuncs.com"]
}
(3) 注意:一定要重启docker服务,如果重启docker后无法加速,可以重新启动OS ,然后通过docker pull命令下载镜像 。
service docker restart
删除镜像
方式一:根据仓库的名称(镜像的名称)来删除 还可以使用image_id来进行删除。
删除指定镜像:
docker rmi 镜像ID
方式二:
删除所有镜像:
docker rmi `docker images -q`
三、Docker容器操作
查看容器
查看正在运行容器
docker ps
查看所有的容器(启动过的历史容器)
docker ps –a
查看最后一次运行的容器:
docker ps -l
查看停止的容器
docker ps -f status=exited
创建与启动容器
docker run
创建容器常用的参数说明:
-i:表示运行容器
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
--name :为创建的容器命名。(前面是两个-)
-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
例如:
创建一个交互式容器并取名为mycentos
docker run -it --name=mycentos centos:7 /bin/bash创建一个守护式容器
docker run -di --name=mycentos2 centos:7
PS:守护式进程 exit退出时,容器不会停止
登录守护式容器:
docker exec -it container_name (或者container_id) /bin/bash
#例如: docker exec -it mycentos2 /bin/bash
退出当前容器:
exit
停止与启动容器
停止正在运行的容器:
docker stop $CONTAINER_NAME/ID
# 例如:docker stop mycentos2
启动已运行过的容器:
docker start $CONTAINER_NAME/ID
#例如:docker start mycentos2
文件拷贝
将文件拷贝到容器内:
docker cp 需要拷贝的文件或目录 容器名称:容器目录
将文件从容器内拷贝出来:
docker cp 容器名称:容器目录 需要拷贝的文件或目录
目录挂载(映射)
我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器里所对应的目录。
创建容器 添加-v参数 后边为 宿主机目录:容器目录
例如:创建容器 并挂载宿主机目录 到容器中的目录下:
docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7
PS:如果共享的是多级的目录,可能会出现权限不足的提示。需要添加参数--privileged=true来解决挂载的目录没有权限的问题。
docker run -di --privileged=true -v /root/test:/usr/local/test --name=mycentos4 centos:7
查看容器IP地址:
查看容器运行的各种数据
docker inspect 容器名
#例如:docker inspect mycentos2
直接输出IP地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名
# 例如: docker inspect --format='{{.NetworkSettings.IPAddress}}' mycentos2
删除容器
删除指定的容器:
docker rm $CONTAINER_ID/NAME
# 这个命令只能删除已经关闭的容器,不能删除正在运行的容器
删除所有的容器:
docker rm `docker ps -a -q`
#或者:
docker rm $(docker ps -aq)
四、部署应用
部署MySQL
拉取MySQL镜像(以5.7版本为例)
docker pull mysql:5.7
创建MySQL容器
docker run -di --name=my_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
进入MySQL容器
docker exec -it pinyougou_mysql /bin/bash
登录mysql
mysql -u root -p
授权允许远程登录
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
#其中如果指定远程某个IP登录的话只需要把%换成指定的IP地址即可
tomcat部署
拉取tomcat镜像
docker pull tomcat:7-jre8
创建tomcat容器
docker run -di --name=my_tomcat -p 9100:8080 tomcat:7-jre8
Nginx部署
拉取Nginx镜像
docker pull nginx
创建Nginx容器
docker run -di --name=pinyougou_nginx -p 80:80 nginx
Redis部署
拉取Redis镜像
docker pull redis
创建Redis容器
docker run -di --name=pinyougou_redis -p 6379:6379 redis
......
==还有很多部署步骤类似就不一个一个写了~==
五、备分与迁移
将容器保存为镜像
docker commit my_nginx mynginx
#my_nginx是容器名称
#mynginx是新的镜像名称
#此镜像的内容就是你当前容器的内容,接下来你可以用此镜像再次运行新的容器
镜像备份
docker save -o mynginx.tar mynginx
#-o 输出到的文件
#执行后,运行ls命令即可看到打成的tar包.
镜像恢复与迁移
docker load -i mynginx.tar
#-i 输入的文件
其它资源:
Docker官网:http://www.docker.com
Docker中文社区:https://www.docker.org.cn/
Docker中文文档:http://www.dockerinfo.net/document