Sau một thời gian làm quen với Docker, mình đã nắm được các lệnh căn bản của Docker nên ít khi truy cập vào Portainer để quản lý container. Hôm nay truy cập lại thì thấy Portainer thông báo đã có phiên bản mới: A new version is available.

Nhân tiện ngồi nâng cấp Portainer lên phiên bản mới nhất, mình chia sẻ luôn hướng dẫn lên blog. Có lẽ sẽ giúp ích cho nhiều bạn mới làm quen với Docker.

Portainer thông báo có phiên bản mới, cần cập nhật

Cách cập nhật ứng dụng Docker lên bản mới nhất sẽ tùy thuộc vào cách bạn khởi tạo ứng dụng: thông qua lệnh docker run hay thông qua Docker-Compose.

Cập nhật ứng dụng khởi tạo bằng Docker-Compose

Với ứng dụng Portainer hiện tại, mình khởi tạo nó bằng cách sử dụng Docker-Compose

services:
  portainer:
    image: portainer/portainer-ce:alpine
    container_name: portainer
    command: -H unix:///var/run/docker.sock
    ports:
      - "9000:9000"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
      - "portainer_data:/data"
    restart: always

volumes:
  portainer_data:Code language: YAML (yaml)

Để cập nhật lên bản mới nhất, đầu tiên cần kéo bản Docker image mới nhất về máy bằng lệnh sau. Chú ý: cần phải truy cập vào thư mục đang chứa file docker-compose.yml của ứng dụng trước khi nhập lệnh

docker-compose pull

Khởi tạo lại container mới dựa trên image vừa tải. Mình bổ sung thêm hậu tố --remove-orphans để loại bỏ các container không còn sử dụng.

docker-compose up -d --remove-orphans

Nhập thêm lệnh sau để xóa image cũ không còn sử dụng nữa.

docker image pruneCode language: Nginx (nginx)

Truy cập lại Portainer, ứng dụng đã được cập nhật lên phiên bản 2.14.2 mới nhất.

Cập nhật Ứng dụng khởi tạo bằng docker run

Nếu bạn chạy ứng dụng trực tiếp thông qua lệnh docker run, cách làm sẽ hơi khác xíu. Đầu tiên, cần kéo image mới về bằng lệnh sau

docker pull portainer/portainer-ce:alpineCode language: Nginx (nginx)

Thay thế portainer/portainer-ce:alpine bằng tên Docker image tương ứng của ứng dụng bạn cần cập nhật.

Kiểm tra ID của ứng dụng đang hoạt động bằng lệnh

docker psCode language: Nginx (nginx)

Theo kết quả trả về, Container ID của Portainer là a3ca0e0f360b

CONTAINER ID   IMAGE                             COMMAND                  CREATED        STATUS                  PORTS                                                                                                                                                                                                                                                                                                 NAMES
a3ca0e0f360b   portainer/portainer-ce:alpine     "/portainer -H unix:…"   2 days ago     Up 30 hours             8000/tcp, 9443/tcp, 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp                                                                                                                                                                                                                                         portainer
5e963e0c4588   jc21/nginx-proxy-manager:latest   "/init"                  5 weeks ago    Up 30 hours             0.0.0.0:80-81->80-81/tcp, :::80-81->80-81/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp                                                                                                                                                                                                                  nginxproxymanager_app_1
641c6af1efd7   guacamole/guacamole               "/opt/guacamole/bin/…"   2 months ago   Up 30 hours             0.0.0.0:8080->8080/tcp, :::8080->8080/tcp                                                                                                                                                                                                                                                             guacamole_compose
9869abf6ba12   guacamole/guacd                   "/bin/sh -c '/usr/lo…"   2 months ago   Up 30 hours (healthy)   4822/tcp                                                                                                                                                                                                                                                                                              guacd_compose
5a0ceb014be9   postgres:13.4                     "docker-entrypoint.s…"   2 months ago   Up 30 hours             5432/tcp                                                                                                                                                                                                                                                                                              postgres_guacamole_compose
Code language: YAML (yaml)

Tạm ngưng và xóa container đang chạy

sudo docker stop a3ca0e0f360b
sudo docker rm a3ca0e0f360bCode language: Nginx (nginx)

Khởi tạo lại container mới cho ứng dụng

sudo docker run --name=[container_name] [options] [docker_image]Code language: Dockerfile (dockerfile)

Với Portainer, lệnh khởi tạo sẽ như sau

docker run -d -p 8000:8000 -p 9443:9443 --name portainer \
    --restart=always \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v portainer_data:/data \
    portainer/portainer-ce:alpineCode language: JavaScript (javascript)

Vậy là xong!

Lưu ý: Nếu bạn cần hỗ trợ kỹ thuật, vui lòng gửi câu hỏi trực tiếp ở phần Thảo luận bên dưới, mình sẽ trả lời sớm. Đừng vào hỏi trong fanpage Yêu Chạy Bộ, sẽ không có phản hồi đâu!

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *


2 Comments

  1. rất biết ơn những bài viết chia sẽ của anh, nhờ những bài viết này mà công viện của em thuận tiện hơn rất nhiều.
    em muốn hỏi về chổ ‘Với Portainer, lệnh khởi tạo sẽ như sau” nếu mình tắt docker thì đã ko còn chạy được portainer nữa thì có phải chổ này nhầm lẫn ko ạ?
    hay là mình có thể update portainer ngay trong nó, rất mong anh chỉ giúp

    1. Cái dòng lệnh khởi tạo Portainer là mình dùng để minh hoạ rằng Portainer đã được thiết lập thành công bằng Docker-Compose và đang hoạt động. Sau đó sẽ dùng Terminal để pull image và cập nhật container. Không thể update portainer ngay trong nó được.