中文文档 https://yeasy.gitbook.io/docker_practice/container/run
安装Docker CE
Docker有两个版本分支,Docker CE和Docker EE,即社区版和企业版。 一般使用 CE 社区版,因为免费
前提
下面全部操作是在 centos7 进行的,非 centos6 ,需要注意,因为如镜像加速的设置会有所区别
如果有安装旧版本,需要卸载旧版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
1. 安装Docker的依赖库。
yum-utils 提供yum-config-manager功能,另两个是 devicemapper 驱动依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
2. 添加Docker CE的软件源信息。
//选择设置阿里仓库的yum源,国外的很慢会导致问题
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(阿里仓库)
yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo(中央仓库)
3. 安装Docker CE。
yum makecache fast //更新yum软件包索引
yum -y install docker-ce //安装docker-ce
4. 启动Docker服务。
systemctl start docker
5. 测试
docker version
docker run hello-world
查看版本
docker -v
docker info
其他命令
//设置并开启自启
systemctl start docker
systemctl enable docker
//重新加载服务配置文件
systemctl daemon-reload
//重启Docker服务
systemctl restart docker
//卸载docker
systemctl stop docker
yum -y remove docker-ce
rm -rf /var/lib/docker
暂时不知道下面命令干嘛的 已解决
yum install -y docker-io //io 是centos6版本中需要安装的 2021.8.15补充
配置镜像加速
阿里云镜像获取地址,登录后复制加速器地址
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
mkdir -p /etc/docker //-p 确保目录名称存在,不存在的就建一个。
vim /etc/docker/daemon.json
#网易云
{"registry-mirrors": ["http://hub-mirror.c.163.com"] }
#阿里云
{
"registry-mirrors": ["https://{自已的编码}.mirror.aliyuncs.com"]
}
systemctl daemon-reload
systemctl restart docker
查看是否配置成功
$ docker info
Registry Mirrors:
https://reg-mirror.qiniu.com
阿里云加速
整个小节已经没用了
$ sudo yum install -y yum-utils
执行下面的命令添加 yum
软件源:
$ sudo yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
(备注:上述的 \ 是换行的意思)
$ sudo sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
# 官方源
# $ sudo yum-config-manager \
# --add-repo \
# https://download.docker.com/linux/centos/docker-ce.repo
使用Docker安装Nginx服务
查看Docker镜像仓库中Nginx的可用版本。
docker search nginx
命令输出如下所示:
拉取最新版的Nginx镜像。
docker pull nginx:latest
命令输出如下所示:
查看本地镜像。
docker images
命令输出如下所示:
运行容器。
docker run --name nginx-test -p 8080:80 -d nginx
命令参数说明:
- —name nginx-test:容器名称。
- -p 8080:80: 端口进行映射,将本地8080端口映射到容器内部的80端口。
- -d nginx: 设置容器在后台一直运行。
命令输出如下所示:
- 在浏览器地址栏输入
http://<ECS公网地址>:8080
访问Nginx服务。
image
- Docker 把应用程序及其依赖,打包在image文件里面,只有通过这个文件,才能生成Docker容器
- image文件可以看作是容器的模板
- 同一个image文件,可以生成多个同时运行的容器实例
- 一个image文件往往通过继承另一个image文件,加上一些个性化设置而生成 | 命令 | 含义 | 案例 | | —- | —- | —- | | image | 查看全部镜像 | docker image ls | | pull | 拉取镜像 | docker pull [imageName] | | rm | 删除镜像 | docker rm [imageName] |
查找镜像
命令 或者 dockerhub
docker search xxx [/ngnix]
查看镜像
docker images
or
docker image ls
列表包含了 仓库名
、标签
、镜像 ID
、创建时间
以及 所占用的空间
。
拉取镜像
$ docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
例:docker pull nginx:latest
删除镜像
docker rmi [image]
or
docker image rm [选项] <镜像1> [<镜像2> ...]
容器
容器是独立运行的一个或一组应用,以及它们的运行态环境。对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用。
注意:下面是 交互式容器
//新建并启动容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
//参数说明
--name="容器新名字": 为容器指定一个名称;
-d: 后台运行容器,并返回容器ID,也即启动守护式容器;
-i:以交互模式运行容器,通常与 -t 同时使用;
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-P: 随机端口映射;
-p: 指定端口映射,有以下四种格式
ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort
containerPort
//示例
使用镜像centos:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
docker run -it centos /bin/bash
简洁版:
docker exec -it 【容器id】 /bin/bash
#参数说明
-it 交互模式
-t 让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上
-i 让容器的标准输入保持打开
/bin/bash 启动一个bash终端
容器命令
进入容器
docker run ubuntu /bin/echo "Hello"
查看容器
docker ps -a 所有的(包含已停止的)
docker ps -l 最新的
docker ps 正在运行的
启动容器
docker start 容器ID或容器名 //启动一个已经停止的容器实例
docker restart 容器ID或容器名
停止容器
docker stop 容器ID或容器名 //停止正在运行的容器
强制停止容器
docker kill 容器ID或容器名 :直接关闭容器
删除容器
docker rm 容器ID
一次性删除多个容器
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm
退出容器
//两种方式,可以通过 docker ps 查看退出后容器状态
exit 容器停止并退出
ctrl+P+Q 容器不停止并退出
其它说明
exec 在容器中执行一条命令
run 在一个新的容器中执行一条命令
重要
守护式容器
docker run -d 容器名
#使用镜像centos:latest以后台模式启动一个容器
docker run -d centos
查看容器日志
docker logs -f -t --tail 容器ID
* -t 是加入时间戳
* -f 跟随最新的日志打印
* --tail 数字 显示最后多少条
查看容器内运行的进程
docker top 容器ID
查看容器内部细节
docker inspect 容器ID
进入正在运行的容器并以命令行交互
docker exec -it 容器ID /bin/bash
重新进入
docker attach 容器ID
区别
attach 直接进入容器启动命令的终端,不会启动新的进程
exec 是在容器中打开新的终端,并且可以启动新的进程
从容器内拷贝文件到主机上
docker cp 容器ID:容器内路径 目的主机路径
//示例
docker cp 9fabae847630:/text.txt /tmp
问题记录
privileged参数
$ docker help run
...
--privileged=false Give extended privileges to this container
大约在0.6版,privileged被引入docker
使用该参数,container内的root拥有真正的root权限
否则,container内的root只是外部的一个普通用户权限
privileged启动的容器,可以看到很多host上的设备,并且可以执行mount
甚至允许你在docker容器中启动docker容器
拓展:需要使用此参数的原因是因为使用了 selinux CentO 安装包
文章 文章
重启 docker 服务报错
问题场景:docker 启动出错
Job for docker.service failed because start of the service was attempted too often. See “systemctl status docker.service” and “journalctl -xe” for details.To force a start use “systemctl reset-failed docker.service” followed by “systemctl start docker.service” again.
*首先需要注意 daemon.json 里的格式不能出现错误,要符合json格式,否则启动失败
(我在设置镜像加速地址的时候 因为首行留空了,所以出错)
其次 如果还启动不成功,那么需要按照提示进行操作
[root@iz8vb88cvk2es0yt2lsx6sz ~]# systemctl reset-failed docker
[root@iz8vb88cvk2es0yt2lsx6sz ~]# systemctl start docker