目录
Docker安装
移除以前的docker相关包:sudo yum remove docker*
安装yum工具类:yum install -y yum-utils
添加docker安装源地址:
bash
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
安装docker:yum install -y docker-ce docker-ce-cli containerd.io
docker-ce:docker社区版
docker-ce-cli:操作docker服务器的命令行
containerd.io:docker容器化的运行环境
启动docker:systemctl enable docker --now
配置阿里云镜像:
bash
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://ckdhnbk9.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
Docker常用命令
找镜像
hub.docker.com 在网站上搜索镜像:如Nginx,使用docker下载镜像
bash
docker pull nginx //下载最新版
docker pull nginx:1.21.1 //下载1.21.1版
docker pull redis
启动镜像
查看下载了哪些镜像:docker images
删除镜像:docker rmi 镜像名:版本号 / 镜像id
直接写镜像名代表删除最新版本:docker rmi nginx == docker rmi nginx:latest
启动容器:有了镜像相当于有了安装包,启动容器相当于安装
docker run [OPTIONS] image [COMMAND] [ARG...]
OPTIONS:设置项
COMMAND:镜像启动运行的命令(镜像里一般有默认,一般不用写)
docker run --name=mynginx -d nginx
--name=mynginx:设置容器名,不能与在运行中的和已关闭的容器重复,除非删除容器
-d:后台运行
查看运行中的容器:docker ps
查看所有容器,不管是否在运行:docker ps -a
删除已经关闭的容器:docker rm name / 容器id
name:docker run 时设置的名字 :--name = mynginx
删除在运行的容器:docker rm name -f
停止在运行的容器:
前台运行:ctrl+c
后台运行:docker stop 容器id/名字
启动停止的容器:docker start 容器id/名字
应用开机自启:docker update 容器id/名字 --restart=always
端口映射:启动docker容器相当于在linux服务器中创建一个虚拟服务器,当我们想要使用linux的公网ip访问服务器时,由于虚拟服务器只在docker容器中,对应的端口也只是虚拟服务器的,无法访问,这时我们可以在linux中使用一个端口与这个虚拟服务器的端口映射,这样我们访问linux服务器的端口就能映射到对应的容器来访问
docker run --name=mynginx -d --restart=always -p 88:80 nginx
-p 88:80
88:linux主机上的端口
80:nginx启动默认的端口
需要关闭对应的防火墙
修改容器内容
docker启动一个容器相当于在linux为其创建一个小linux:小型linux完整系统+容器软件的环境,因此可以进入这个小型linux系统来修改容器内容
进入容器:docker exec -it 容器id /bin/bash
-it :以交互模式进入容器内部
/bin/bash:进入容器的bash控制台
这个小型linux的内容可以在下载镜像时查看。
这时在访问88端口就发现nginx内容修改了
提交改变
当我们对容器进行修改后,如果该容器挂了,我们再次通过镜像创建容器时会发现,对之前容器的修改并不会在新容器上,意味着我们可能要重新修改。
为了防止这种情况,我们可以使用以下命令把修改后的容器提交到本地镜像中,当容器挂了时使用该镜像进行容器启动,这样以前的修改就能保存下来。
命令:docker commit -a "提交者" -m "提交信息" 容器id 镜像名:版本号
这时之前对首页的修改不会出现
这时对首页的修改恢复了:
推送到远程仓库
提交改变只能在本机上恢复,当不同主机需要根据提交到本机的镜像来启动容器,可以用物理传输:把该镜像打包为压缩文件在发送给其他主机;也可以将该镜像推送到远程仓库中,另一台主机在到远程仓库中拉取到自己主机上并启动容器。
物理传输
打包命令:docker save -o 压缩文件名.tar 镜像名:版本号
发送命令:scp 压缩文件 目标主机:/路径
也可以使用工具来传输:如FinalShell。
另一台主机加载该镜像:
docker load -i 压缩文件
推送远程仓库
在docker hub中注册登录账号,创建一个新仓库
使用命令:docker tag 本地镜像名:版本号 仓库名:版本号 ,将镜像复制一份,使镜像名格式正确
登录docker hub:docker login
推送:docker push 仓库名:版本号
推送完建议退出登录:docker logout
别的主机拉取:docker pull 仓库名:版本号
挂载数据
修改容器内容需要进入容器的虚拟服务器中,但可以将本机服务器的一个文件夹与虚拟服务器的文件夹关联,这样只需要修改本机服务器下文件夹就能修改容器内容。
bash
docker run --name=mynginx \
-d --restart=always \
-p 88:80 -v /data/html:/usr/share/nginx/html:ro \
nginx
-v:本机文件夹:容器文件夹:操作方式
操作方式:ro:容器里边不能改
rw:容器里边能改(默认)
如果本机文件夹为空,容器也为空(相当于覆盖)
docker日志
命令:docker logs 容器名/id
docker复制
将docker容器中的文件复制到本机或把本机文件复制到容器
命令:docker cp 容器id:容器文件路径 本机文件路径