这半喇月发生了很多事,很无谓很闹心,今天重拾起自己,做做功课写写字
文章目录
- 一、准备
- 二、实践
-
- [2.1 安装docker](#2.1 安装docker)
- 2.2docker镜像操作
-
- [2.2.1 下载镜像等基本操作](#2.2.1 下载镜像等基本操作)
- [2.2.2 启动容器等基本操作](#2.2.2 启动容器等基本操作)
- [2.2.3 修改页面](#2.2.3 修改页面)
- [2.2.4 保存镜像](#2.2.4 保存镜像)
- [2.2.5 分享社区](#2.2.5 分享社区)
- 总结
一、准备
该篇实验前准备一个服务器,我用的是阿里服务器
官网文档(如下)指导的centos已经是version9了,我的是7。如果你也是老版本,里面有关7以上版本的dnf需要注意一下
如何看自己版本:
bash
cat /etc/os-release

二、实践
2.1 安装docker
bash
# 移除旧版本docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 配置docker yum源
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装 最新 docker
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 启动& 开机启动docker; enable + start 二合一
sudo systemctl enable --now docker
#加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://mirror.huaweicloud.com",
"https://docker.m.daocloud.io"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
配置docker yum源是因为从官网down is too slow.
还有最后的"加速",这改变了docker的json文件,docker自己下载东西的时候会从镜像下(这里是华为镜像)
bash
docker ps
This commend:查看运行中的docker命令,比如有个nginx运行,则:
如果只启动docker是sudo systemctl start docker
,开机自启是systemctl enable docker
在这docker就下载完成了
2.2docker镜像操作
我们以一个task为主线来开展工作
Task:启动一个nginx,并将它的首页改为自己的页面,发布出去,让所有人都能使用
2.2.1 下载镜像等基本操作

- 搜索镜像
bash
docker search nginx
usage:搜索有没有nginx镜像
但是我一直是timeout,有尝试更换源等方法但无果,试了试好像不影响后面操作,在此暂时skip。(有大佬了解欢迎remark留言)
- 下载镜像
bash
docker pull nginx
3.镜像列表
bash
docker images

这里hello-world和ubuntu也是之前我pull下来的,重要的结果是nginx存在
repository是镜像的名字,Tag是版本,ID和其他两个不用说了
pull的默认是docker pull nginx:latest
如果想下载指定版本,写镜像名加其标签。
如何找自己想要的版本呢,访问docker如下官网,搜索框查镜像名,里面有各种各样的,点自己想要的,然后点Tag按钮,右边甚至有直接pull该版本的指令。
例子如下
4. 删除镜像
bash
docker rmi ID/名称

如果是名称,默认版本也是lastest
2.2.2 启动容器等基本操作

- 运行
bash
docker run ID/名称
run就让"镜像"装到"容器"里了。
这里有意思的是,如果你写的是"镜像名称",命令机制:先找本地有没有该镜像的lastest版本,如果有,直接用;如果没有,他会自己主动download!
但他和pull完run有什么区别呢?区别如下

- 查看
bash
docker ps
这个已经于上文解释
3. 停止
bash
docker stop 容器名/容器ID

如果要看到退出了的,docker ps -a
4. 重启与开启
bash
docker start ID(ID可以是缩减)

好像ID缩减一般取其前3位。我尝试了前2位与1位,都可以。我还没尝试如果有若干ID前面缩减相同的容器,他会开启哪一个。
重启是docker restart ID
亲测,一个在run,我start不了另一个。但我的理论分析上可以,"待研究"
5. 状态
bash
docker stats ID/名字

6. 日志
bash
docker logs ID

7. 删除
bash
#删除
docker rm ID
#强制删除
docker rm -f ID

这里就得注意,rm是删除,前提是容器得先stop。如果不想管这个,请强制删除,在rm后面加-f,如上图。
这样这个装nginx的容器啥都没了
8. run的细节用法
我先给个code
bash
docker run -d --name my_nginx_test -p 8885:80 nginx
解释如下:
- -d是表示后台启动
- --name表示将该命令的镜像装到--name后面这个自己指定的容器里
-p 80:80
这个里面的-p是端口映射,前一个8885是主机的端口,后一个80是容器的80。即:主机的80端口映射到容器的80端口。

这样访问服务器的8885端口,就可以看到
但记得在服务器添加规则:允许 TCP 8885 端口 的入站和出站流量
2.2.3 修改页面
如果想修改页面,需要进入容器。如下图蓝盒里面的黑框框
bash
docker exec -it mynginx /bin/bash
- -it表示以交互模式进入(后面接容器名字orID)
--i:也就是 --interactive,其作用是保持标准输入(STDIN)处于开启状态,即便没有连接上终端。
-t:即 --tty,它会为容器分配一个伪终端。
把这两个选项结合起来使用,就可以在容器内开启一个交互式的终端会话。 - /bin/bash此为要在容器内部执行的命令。/bin/bash 代表在容器中启动一个 Bash shell,这样用户就能在容器内部以交互式的方式执行各种命令了。
然后就拿到这里面的shell了,想改页面,原始方法如下。后续介绍更简便的方法(将容器映射到主机)
2.2.4 保存镜像

- 提交
bash
docker commit 容器 起个镜像名

- 保存
bash
docker save -o 文件名 镜像

- 加载
我们上文打包了镜像, 这里down下来使用
bash
docker load -i xxx.zip/xxx.tar

这就到你的images里面了,下面是使用
2.2.5 分享社区
附:该部分为补充学习,我在该小节没有实操
bash
docker login
输入你在hub.dokcer.com的用户名和密码
进入后
bash
docker tag 源镜像名字 你docker网站的ID名字/要上传镜像本地的名字
tag用途是给镜像添加一个新的标签
"你docker网站的ID名字/要上传镜像本地的名字",前面加hub.docker的ID,是听说网站上传是这个要求的
bash
docker push 你docker网站的ID名字/要上传镜像本地的名字
总结
相关基础命令如下,具体使用时如果生疏忘记,可以后面接--help