Docker 实践
最近需要部署几个测试服务,只能撸起袖子自己干了。
1. Docker 安装
某云服务器操作系统如下:
$ uname -a
Linux react-master 3.10.0-1160.99.1.el7.x86_64 #1 SMP Wed Sep 13 14:19:20 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
开干,安装之前先卸载一些组件和依赖确保环境比较干净
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
Docker
的安装文件一般存放在 /var/lib/docker/
目录中,有必要手动删除!
设置安装源
安装依赖工具包
yum install -y yum-utils
设置某云的安装源
sudo yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
非常不推荐官方源,下边这个是清华的,当然也可以考虑清华、中科大、上交大等非营利机构的
sudo yum-config-manager \
--add-repo \
https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
安装 Docker
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
这个是安装最新的版本,当然如果想安装指定版本可以先查看当前支持那些版本
yum list docker-ce --showduplicates | sort -r
docker-ce.x86_64 18.06.3.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.2.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable
<...>
比如安装 docker-ce-8.06.2.ce-3.el7
以此类推
启动服务
systemctl start docker
当然也可以随时查看 docker
服务的状态
systemctl status docker
Hello Docker
sudo docker run hello-world
设置镜像源
在上述运行 hello-world
过程中本地由于没有这个镜像,会到网上拉取镜像很大可能性会失败,如果失败这个方案可能会解决你的问题,如果还失败到网上查找更靠谱的镜像源。
具体步骤到某云工作台(需要登录),搜索容器镜像服务
左侧找到菜单 镜像加速器
根据自己操作系统选择
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://<替换掉自己的ID>.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
每个人的加速地址不一样,用自己的吧
卸载
简单粗暴,直接开干
sudo yum remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
当然比如镜像、存储、网络等等一些文件在本地一下文件中也要删掉
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
Over!
2. 镜像和容器
开始使用 Docker
之前肯定要拉取镜像到本地,然后才能有启动容器、删除容器、删除镜像等等操作
拉取镜像
docker pull centos
查看镜像
docker images
...
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest 509b2fc82da6 2 weeks ago 117MB
hello-world latest d2c94e258dcb 15 months ago 13.3kB
centos latest 5d0da3dc9764 2 years ago 231MB
搜索镜像
在 Terminal
中可以进行简单的搜索
docker search redis
NAME DESCRIPTION STARS OFFICIAL
redis Redis is the world’s fastest data platform f… 12960 [OK]
bitnami/redis-cluster Bitnami container image for Redis Cluster 50
bitnami/redis-exporter Bitnami container image for Redis Exporter 13
redis/redis-stack-server redis-stack-server installs a Redis server w… 80
redislabs/redisinsight RedisInsight - The GUI for Redis 103
其中 OFICIAL
表示是否是官方维护的镜像,推荐使用官方镜像。但是如果碰到像拉取某个版本的镜像terminal
中搜索就无能为力了,需要到官方 Docker Hub 上搜索,可以直接复制拉取路径比如:
docker pull redis:7.4
启动容器
先跑起来
docker run -id --name=centos1 centos:latest
bb0415f760ec1f582dbafd2c2b04ba5ee00cbf353c2dc9664ab19d0089f06f20
几个参数的含义
i
表示交互式操作d
以后台进程的方式启动name
给容器起一个名字- 最后一个参数就是本地镜像名称
当然启动完后好像不知道怎么操作了,接下来查看容器的状态了
查看容器
- 查看正在运行的容器
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bb0415f760ec centos:latest "/bin/bash" 3 minutes ago Up 3 minutes centos1
- 查看所有状态的容器
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bb0415f760ec centos:latest "/bin/bash" 4 minutes ago Up 4 minutes centos1
411a817d37e9 centos:latest "/bin/bash" 6 hours ago Exited (137) 52 minutes ago c1
可以通过 status
来辨别容器是否在运行中,Up 3 minutes
表示容器一直在运行中并且已经运行了三分钟,Exted ...
表示容器运行完已经退出了
进入容器
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bb0415f760ec centos:latest "/bin/bash" 30 minutes ago Up 30 minutes centos1
docker exec -it centos1 /bin/bash
[root@bb0415f760ec /]#
[root@bb0415f760ec /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@bb0415f760ec /]# exit
exit
进入容器过后 root@bb0415f760ec
容器后的用户 其实跟运动过程中的容器的 CONTAINER ID
是一样的,其中参数含义如下
t
为容器分配一个虚拟终端运行i
使容器保持运行状态,容器创建后自动进入容器中,退出容器后容器自动关闭
停止容器
# root @ react-master in ~ [17:18:32]
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bb0415f760ec centos:latest "/bin/bash" 38 minutes ago Up 38 minutes centos1
# root @ react-master in ~ [17:20:57]
$ docker stop centos1
centos1
# root @ react-master in ~ [17:21:14]
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bb0415f760ec centos:latest "/bin/bash" 38 minutes ago Exited (137) 6 seconds ago centos1
411a817d37e9 centos:latest "/bin/bash" 7 hours ago Exited (137) About an hour ago c1
# root @ react-master in ~ [17:21:21]
$ docker start centos1
centos1
# root @ react-master in ~ [17:22:54]
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bb0415f760ec centos:latest "/bin/bash" 40 minutes ago Up 3 seconds centos1
删除容器
# root @ react-master in ~ [17:29:33]
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bb0415f760ec centos:latest "/bin/bash" 6 minutes ago Up 6 minutes centos1
411a817d37e9 centos:latest "/bin/bash" 7 hours ago Up 3 seconds c1
# root @ react-master in ~ [17:29:34]
$ docker rm c1
Error response from daemon: cannot remove container "/c1": container is running: stop the container before removing or force remove
# root @ react-master in ~ [17:29:41] C:1
$ docker stop c1
c1
# root @ react-master in ~ [17:29:58]
$ docker rm c1
c1
# root @ react-master in ~ [17:35:03]
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bb0415f760ec centos:latest "/bin/bash" 52 minutes ago Up 12 minutes centos1
先暂停容器才能删除!当然也可以一次全部删掉
# root @ react-master in ~ [17:35:03]
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bb0415f760ec centos:latest "/bin/bash" 52 minutes ago Up 12 minutes centos1
2c498bbe6f15 hello-world "/hello" 7 hours ago Exited (0) 7 hours ago agitated_hofstadter
# root @ react-master in ~ [17:35:17]
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bb0415f760ec centos:latest "/bin/bash" 57 minutes ago Up 17 minutes centos1
# root @ react-master in ~ [17:40:49]
$ docker rm `docker ps -qa`
2c498bbe6f15
Error response from daemon: cannot remove container "/centos1": container is running: stop the container before removing or force remove
# root @ react-master in ~ [17:41:21] C:1
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bb0415f760ec centos:latest "/bin/bash" 58 minutes ago Up 18 minutes centos1
# root @ react-master in ~ [17:41:30]
$ docker stop centos1
centos1
# root @ react-master in ~ [17:41:45]
$ docker rm `docker ps -qa`
bb0415f760ec
# root @ react-master in ~ [17:41:49]
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# root @ react-master in ~ [17:41:51]
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
查看容器信息
# root @ react-master in ~ [17:46:34] C:125
$ docker run -id --name=c1 centos:latest
341d84b4f6763acbbf0a12bdbfb6c45c4cac4c6abb09cae397a56544da314e7e
# root @ react-master in ~ [17:46:40]
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
341d84b4f676 centos:latest "/bin/bash" 4 seconds ago Up 3 seconds c1
# root @ react-master in ~ [17:46:44]
$ docker inspect c1
下边省略一大坨...
具体看那些信息后边用到的时候会重点看!