授权声明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 Developer Centre, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道
前言
我们之前开发中有时会遇到这样的问题:在本地开发好功能后,部署到服务器,或者其他人拉到本地接着开发时,会出现功能无法使用的情况。
而且我们平常搭建环境也需要耗费很长时间。对于团队协作时来说,每有新人进来,都需要浪费这些可以避免的时间。而且搭建环境时,也常常会产生的各种问题,导致项目代码运行异常。
如果使用了 Docker 的话,只需最开始的人写好开发容器,其他人只需要 pull 下来,即可完成项目环境的搭建,能有效避免无意义的时间浪费。
所以今天就说下怎么在服务器上部署下docker,并简单运行
准备云服务器
登录
点击我的账户->aws管理控制台。可以跳转到登录页面
如果是新用户可以先注册。新用户可以免费1年使用服务器
控制台
- 进入控制台后,点击服务->计算->EC2
- 创建实例
选择完要创建实例的地区,点击启动新实例
这里选择默认系统就可以了,如果你想要其他系统,可以选择你想要的系统。
配置登录秘钥,这个文件要保存好,后续登录需要用到
可以修改下配置储存的大小,因为给到免费用户的有30G,而默认的只有8G
配置后基础信息之后,点击右边的启动实例就可以了,注意不要超过免费套餐的范围。
可以看到列表已经有服务器信息了
- 连接到实例
docker
安装
方式一:使用系统包管理器
特别说明: 因为我选择的是亚马逊 Linux 2023,所以使用以下命令来安装
sudo yum install -y docker
如果是亚马逊 Linux 2,运行以下命令:
sudo amazon-linux-extras install docker
安装完成后,查看docker版本
docker -v # 查看docker版本
启动并加入开机启动
sudo systemctl start docker #启动
sudo systemctl enable docker #开机自启
查看下docker状态
方式二:使用二进制文件安装
下载二进制文件
可以从https://download.docker.com/linux/static/stable/ ,选择你想要下载的二进制文件
#下载二进制安装包
wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.7.tgz
#解压压缩包
tar -zxvf docker-20.10.7.tgz
#将解压docker目录下的所有文件拷贝到/usr/bin下
cp docker/* /usr/bin/
以systemd的方式管理docker
增加docker组
groupadd docker
安装两个单元文件(service 和 socket)到 /usr/lib/systemd/system/ 中
cat > /usr/lib/systemd/system/docker.service << EOF
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
Requires=docker.socket
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
OOMScoreAdjust=-500
[Install]
WantedBy=multi-user.target
EOF
cat > /usr/lib/systemd/system/docker.socket << EOF
[Unit]
Description=Docker Socket for the API
[Socket]
ListenStream=/var/run/docker.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker
[Install]
WantedBy=sockets.target
EOF
我使用systemctl start docker 启动失败
提示:Job for docker.service failed because the control process exited with error code.
See “systemctl status docker.service” and “journalctl -xeu docker.service” for details.
使用 dockerd & 启动时,提示“failed to start daemon: Error initializing network controller: error obtaining controller instance: failed to create NAT chain DOCKER: Iptables not found”
说明Iptables 没有安装,安装Iptables
yum install iptables -y
重新执行systemctl start docker,启动成功
现在docker已经安装完成,并且运行起来了
我们通过运行 hello-world 镜像来验证Docker是否正确安装。
可以看到运行成功,这样我们就成功使用二进制文件安装了docker
简单使用
使用docker部署一个redis服务
- 拉取redis镜像
sudo docker pull redis:7.0.12
这里我们拉取了一个7.0.12版本的redis镜像
- 启动redis容器
sudo docker run --restart=always -p 6379:6379 --name myredis -d redis:7.0.12 --requirepass redispwd
– restart always 在容器退出时总是自动重启它
– name myredis 为容器指定一个名称,这里是"myredis"
– requirepass redispwd 设置了Redis服务器的密码
-p 6379:6379: 将主机上的6379端口映射到容器的6379端口上,使得外部可以通过主机的6379端口访问Redis容器
-d 以后台模式运行容器,在后台运行而不阻塞终端
- 进入redis容器
sudo docker exec -it myredis /bin/bash
使用redis-cli与redis数据库交互
效果:
总结
可以看到我们使用docker来部署一个服务是非常简单的,只需要拉取镜像运行容器就可以了。而且我们只要指定好镜像的版本就不用担心环境不一致的问题