Docker使用
Docker简介
Docker技术的三大核心概念,分别是:
l 镜像(Image)
l 容器(Container)
l 仓库(Repostitory)
负责对Docker镜像进行管理的,是Docker Registry服务(类似仓库管理员)
不是任何人建的任何镜像都是合法的,万一有人盖了一个有问题的房子呢?
所以,Docker Registry服务队镜像的管理是非常严格的
最常使用的Registry公开服务,是官方的Docker Hub,这也是默认的Registry,并拥有大量的高质量的官方镜像
Docker启动和安装
安装Docker
Docker官方建议在Ubuntu中安装,因为Docker是基于Unbantu发布的,而且一般Docker出现的问题Ubuntu是最先更新或者打补丁的,在很多版本的Centos中是不支持更新最新的一些补丁包的。
由于我们学习的环境都使用的Centos,因此这里将Docker安装到Centos上,注意:建议安装在Centos7.x以上的版本,在Centos6.x的版本中,安装前需要安装其他很多的环境,而且Docker很多补丁不支持更新。
验证Linux内核版本
Docker要求Linux的Kernel版本必须大于3.8,推荐使用3.10及更高,所以需要先验证CentOS的内核是否大于3.8。
l 使用uname命令验证
uname -r |
卸载已安装的Docker
如果已经安装过Docker,请先卸载,再重新安装,来确保整体的环境是一致的。由于这个虚拟机是新创建的,所以并没有安装过Docker,但如果同学们使用已有的虚拟机,则需要按照下面的命令卸载。
l 使用yum卸载Docker库
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine |
安装yum工具包和存储驱动
yum install -y yum-utils device-mapper-persistent-data lvm2 |
安装Docker的yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo |
如果连接超时,可以使用alibaba源 |
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo |
安装Docker-19.03.5
yum install docker-ce docker-ce-cli containerd.io |
启动docker
sudo service docker start |
设置开机启动
systemctl enable docker |
将指定用户添加到用户组
usermod -aG docker root |
退出,然后重新登录,以便让权限生效。 |
安装后查看Docker版本
docker version |
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 |
配置阿里云镜像加速
操作步骤:
操作步骤 |
说明 |
1 |
鉴于国内网络问题,后续拉取 Docker 镜像十分缓慢,我们可以需要配置加速器来解决 |
2 |
注册一个属于自己的阿里云账户(可复用淘宝账号) |
登陆阿里云开发者平台 |
|
获取加速器地址 |
|
3 |
配置本机Docker运行镜像加速器 |
阿里云的本人自己账号的镜像地址(需要自己注册有一个属于你自己的): https://xxxx.mirror.aliyuncs.com vim /etc/docker/daemon.json |
|
4 |
重启daemon服务 |
systemctl daemon-reload |
|
5 |
重启Docker服务 |
systemctl restart docker |
|
6 |
Linux 系统下配置完加速器需要检查是否生效 |
systemctl status docker |
Docker常用命令
帮助命令
操作 |
指令 |
查看Docker版本 |
docker version |
查看docker概要信息 |
docker info |
查看docker帮助文档 |
docker --help |
镜像指令
搜索镜像
docker search 镜像名字 |
拉取镜像
docker pull 镜像名字 |
查看镜像
docker images |
删除单个镜像
docker rmi -f 镜像ID |
删除多个镜像
docker rmi -f 镜像名1:TAG 镜像名2:TAG |
删除全部
docker rmi -f $(docker images -qa) |
容器指令
查看容器
l 查看正在运行的容器
docker ps |
l 查看所有容器
docker ps -a |
l 查看最后一次运行的容器
docker ps -l |
l 查看停止的容器
docker ps -f status=exited |
创建与启动容器
创建容器常用的参数说明
l 创建容器的命令:
docker run |
l OPTIONS说明(常用):有些是一个减号,有些是两个减号
--name="容器新名字": 为容器指定一个名称; |
-d: 在run后面加上参数-d,会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i-t两个参数,创建后会自动进入容器),并返回容器ID,也即启动守护式容器; |
-i:以交互模式运行容器,通常与 -t 同时使用; |
-t:表示容器启动后会进入其命令行,为容器重新分配一个伪输入终端,通常与 -i 同时使用; |
-p: 表示端口映射 有以下四种格式 ip:hostPort:containerPort ip::containerPort hostPort:containerPort containerPort 前者表示宿主机端口,后者是容器内的映射端口,可以使用多个-p做多个端口映射 |
l 启动交互式容器
docker run -it --name=centos 镜像名称:标签 /bin/bash |
拉取centos:docker pull centos |
docker run -it centos /bin/bash |
这时通过ps命令查看,发现可以看到启动的容器,状态为启动状态 |
也可以这样写 |
docker run -it --name=mycentos centos:latest /bin/bash |
/bin/bash的作用是因为docker后台必须运行一个进程,否则容器就会退出,在这里表示启动容器后启动bash。 |
l 退出当前容器
exit |
l 守护式方式创建容器:
docker run -di --name=容器名称 镜像名称:标签 |
docker run -di --name=mycentos2 centos:latest |
登录守护式容器方式: |
docker exec -it 容器名称(或者容器id) /bin/bash |
什么是守护式容器:
能够长期运行 没有交互式会话 适合运行应用程序和服务 |
停止与启动容器
l 停止容器
docker stop 容器名称(或者容器id) |
docker stop mycentos2 |
l 启动容器
docker start 容器名称(或者容器id) |
docker start mycentos2 |
l 重启容器
docker restart 容器名称(或者容器id) |
docker restart mycentos2 |
l 强制停止容器
docker kill 容器名称(或者容器id) |
docker kill mycentos2 |
文件拷贝
l 如果需要将文件拷贝到容器内可以使用cp命令
docker cp 需要拷贝的文件或者目录 容器名称:容器目录 |
docker cp /tmp/anaconda.log mycentos2:/tmp |
docker exec -it mycentos2 /bin/bash |
l 也可以将文件从容器内拷贝出来
docker cp 容器名称:容器目录 需要拷贝的文件或者目录 |
docker cp mycentos2:/tmp /export/ |
目录挂载
可以在创建容器的时候,将宿主机的目录和容器内的目录进行映射,这样就可以通过修改宿主机的某个目录的文件从而去影响容器
创建容器添加-v参数,后边为宿主机目录:容器目录,例如:
docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:latest |
docker exec -it mycentos3 /bin/bash |
ls /usr/local/myhtml/ |
cp /export/tmp/anaconda.log /usr/local/myhtml/ |
docker exec -it mycentos3 /bin/bash |
docker run -di --privileged=true -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:latest |
如果共享的是多级的目录,可能会出现权限不足的提示。
这是因为Centos7中的安全模块selinux把权限禁掉了,我们需要添加参数--privileged=true来解决挂载的目录没有权限的问题?
查看容器ip地址
l 可以通过以下命令查看容器运行的各种数据
docker inspect 容器名称(容器id) |
docker inspect mycentos3 |
l 也可以直接执行下面的命令直接输出IP地址
docker inspect --format=’{{.NetworkSettings.IPAddress}}’ 容器名称(容器id) |
docker inspect --format=’{{.NetworkSettings.IPAddress}}’ mycentos3 |
删除容器
l 删除指定的容器:
docker rm 容器名称(容器ID) |
docker stop mycentos3 |
docker rm mycentos3 |
.NETCORE使用Docker部署到Linux
制作dockerfile文件
创建dockerfile文件
1 #FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build 2 FROM mcr.microsoft.com/dotnet/aspnet:3.1 AS build 3 WORKDIR /app 4 COPY . . 5 EXPOSE 80 6 ENTRYPOINT ["dotnet", "LP_SSK_API.dll"]
利用dockerfile文件制作镜像
将发布后的.netcore部署包上传到linux服务器上
使用dockerfile文件制作镜像
进入目录
cd /dockerfile文件所在目录
制作镜像 docker build -t web .
使用镜像启动一个容器
docker run --name=mywebapi -p 8080:80 web
Redis部署
首先拉取docker镜像
docker pull redis
如需指定版本,则使用
docker pull redis:<version>
在本地某个位置创建以下内容建议将以下内容放在一起,方便以后管理和查看
# 以/docker/redis为例 mkdir /docker/redis mkdir /docker/redis/data touch /docker/redis/redis.conf touch /docker/redis/redis.bash
编辑配置文件vim /docker/redis/redis.conf
# Redis配置文件 # Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 daemonize no # 指定Redis监听端口,默认端口为6379 port 6379 # 绑定的主机地址,不要绑定容器的本地127.0.0.1地址,因为这样就无法在容器外部访问 bind 0.0.0.0 # 持久化 appendonly yes
编辑/docker/redis/redis.bash
docker run -p 6379:6379 --name redis -v /docker/redis/redis.conf:/etc/redis/redis.conf -v /docker/redis/data:/data -d redis redis-server /etc/redis/redis.conf
说明下以上命令
docker run redis # 从redis镜像运行容器 -p 6379:6379 # 映射本地6379端口到容器6379端口,前为本地端口 --name redis # 设置容器名称为redis,方便以后使用docker ps进行管理 -v /docker/redis/redis.conf:/etc/redis/redis.conf # 关联本地/docker/redis/redis.conf文件到容器中/etc/redis/redis.conf,同样,前为本地 -v /docker/redis/data:/data # 关联本地/docker/redis/data到容器内/data目录,此为存放redis数据的目录,为方便以后升级redis,而数据可以留存 -d # 后台启动,使用此方式启动,则redis.conf中daemonize必须设置为no,否则会无法启动 redis-server /etc/redis/redis.conf # 在容器内启动redis-server的命令,主要是为了加载配置
给予执行权限
sudo chmod 777 /docker/redis/redis.bash
启动
/docker/redis/redis.bash
# 如果无法启动或者docker ps中无对应内容,将bash中命令复制出来,删除-d参数启动,查看报错信息 # 使用redis-cli或者rdm访问 localhost:6379 # 如需访问容器,可使用 docker exec -it redis bash # 或直接使用redis-cli访问容器内redis docker exec -it redis redis-cli
VIM安装
apt-get update //安装vim apt-get install vim