Docker
Trending

Cài đặt và sử dụng Docker trên Ubuntu 18.04

How To Install and Use Docker on Ubuntu 18.04

Giới thiệu về Docker

Docker là một dự án mã nguồn mở giúp tự động triển khai các ứng dụng LinuxWindows vào trong các container ảo hóa.

Docker cung cấp một lớp trừu tượng và tự động ảo hóa dựa trên Linux. Docker sử dụng những tài nguyên cô lập của Linux như cgroups, kernel, quản lý tệp để cho phép các container chạy độc lập bên trong một thực thể Linux

Trong hướng dẫn này, bạn sẽ cài đặt và sử dụng Docker Community Edition (CE) trên Ubuntu 18.04. Bạn sẽ tự cài đặt Docker, làm việc với các container và hình ảnh và đẩy image lên Docker Repository.

Chuẩn bị :

Để làm theo hướng dẫn này bạn cần chuẩn bị :

  • Một server Ubuntu 18.04, bao gồm 1 user none-root có quyền sudo, firewall.
  • 1 tài khoản trên Docker Hub nếu bạn muốn tạo image riêng của mình và đẩy lên Docker Hub ( bước 7, 8 trong bài này).

Step 1 — Cài đặt Docker

Gói cài đặt Docker có sẵn trên Ubuntu repository nhưng có thể không phải bản mới nhất. Để cài đặt bản mới nhất của Docker, chúng ta cần cài đặt từ Docker repository.

Các bước cài đặt Dọcker:

 
 # Update your existing list of packages:
 $ sudo apt update

 # Next, install a few prerequisite packages which let apt use packages over HTTPS:
 $ sudo apt install apt-transport-https ca-certificates curl software-properties-common

 # Then add the GPG key for the official Docker repository to your system:
 $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

 # Add the Docker repository to APT sources:
 $ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"

 # Next, update the package database with the Docker packages from the newly added repo:
 $ sudo apt update

 # Make sure you are about to install from the Docker repo instead of the default Ubuntu repo:
 $ apt-cache policy docker-ce

Bạn sẽ thấy kết quả của lệnh apt-cache policy docker-ce

docker-ce:
  Installed: (none)
  Candidate: 18.03.1~ce~3-0~ubuntu
  Version table:
     18.03.1~ce~3-0~ubuntu 500
        500 https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages

Chú ý rằngdocker-ce chưa được cài đặt, nhưng một bản khác cho việc cài đặt từ Docker Repository trên Ubuntu 18.04 (bionic).

Cuối cùng, cài đặt Docker:

sudo apt install docker-ce

Docker đã được cài đặt, để check xem Docker đã hoạt động chưa, ta dùng

sudo systemctl status docker

Kết quả là:

Output
● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2018-07-05 15:08:39 UTC; 2min 55s ago
     Docs: https://docs.docker.com
 Main PID: 10096 (dockerd)
    Tasks: 16
   CGroup: /system.slice/docker.service
           ├─10096 /usr/bin/dockerd -H fd://
           └─10113 docker-containerd --config /var/run/docker/containerd/containerd.toml

 

Như vậy việc cài đặt docker đã xong, bây giờ chúng ta tiến hành khám phá các câu lệnh trong docker

Step 2 — Thực thi các câu lệnh Docker mà không cần sudo (Tuỳ chọn)

Theo mặc định, lệnh docker chỉ có thể được chạy bởi người dùng root hoặc bởi người dùng trong group docker, được tạo tự động trong quá trình cài đặt Docker. Nếu bạn cố chạy lệnh docker mà không có tiền tố với sudo hoặc không có trong nhóm docker, bạn sẽ nhận được một đầu ra như thế này:


Output
docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.
See 'docker run --help'.

Nếu bạn muốn tránh gõ sudo bất cứ khi nào bạn chạy lệnh docker, hãy thêm tên người dùng của bạn vào nhóm docker:

sudo usermod -aG docker ${USER}

Để áp dụng thành viên nhóm mới, đăng xuất khỏi máy chủ và đăng nhập lại hoặc nhập thông tin sau:

su - ${USER}

Bạn sẽ được nhắc nhập mật khẩu người dùng để tiếp tục.

Xác nhận rằng người dùng của bạn hiện đã được thêm vào nhóm docker bằng cách nhập:

id -nG
Output 
sammy sudo docker

Nếu bạn cần thêm người dùng vào nhóm docker mà bạn chưa đăng nhập, hãy khai báo tên người dùng đó một cách rõ ràng bằng cách sử dụng:

sudo usermod -aG docker username

Phần còn lại của bài viết này giả định rằng bạn đang chạy lệnh docker với tư cách là người dùng trong group docker. Nếu bạn chọn không, vui lòng thêm các lệnh bằng sudo.

Hãy khám phá lệnh docker tiếp theo.

Step 3 — Sử dụng Docker Command

Using docker consists of passing it a chain of options and commands followed by arguments. The syntax takes this form:

docker [option] [command] [arguments]

Để xem các lệnh trong docker ta dùng lệnh:

$ docker

Kể từ Docker 18, danh sách đầy đủ các tiểu ban có sẵn bao gồm:

Output
  attach      Attach local standard input, output, and error streams to a running container
  build       Build an image from a Dockerfile
  commit      Create a new image from a container's changes
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
  diff        Inspect changes to files or directories on a container's filesystem
  events      Get real time events from the server
  exec        Run a command in a running container
  export      Export a container's filesystem as a tar archive
  history     Show the history of an image
  images      List images
  import      Import the contents from a tarball to create a filesystem image
  info        Display system-wide information
  inspect     Return low-level information on Docker objects
  kill        Kill one or more running containers
  load        Load an image from a tar archive or STDIN
  login       Log in to a Docker registry
  logout      Log out from a Docker registry
  logs        Fetch the logs of a container
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  ps          List containers
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  rmi         Remove one or more images
  run         Run a command in a new container
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  search      Search the Docker Hub for images
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  version     Show the Docker version information
  wait        Block until one or more containers stop, then print their exit codes

Để xem các tùy chọn có sẵn cho một lệnh cụ thể:

docker docker-subcommand --help

Để xem thông tin toàn hệ thống về Docker, hãy sử dụng:

docker info

Hãy khám phá một số các lệnh này. Chúng ta sẽ bắt đầu bằng cách làm việc với image trong docker.

Step 4 — Làm việc với Docker Images

Docker container được xây dựng từ Docker image. Theo mặc định, Docker lấy các image này từ Docker Hub. Bất cứ ai cũng có thể lưu trữ Docker image của họ trên Docker Hub, vì vậy hầu hết các ứng dụng và bản phân phối Linux mà bạn cần sẽ có image được lưu trữ ở đó.

Để kiểm tra xem bạn có thể truy cập và tải hình ảnh từ Docker Hub:

docker run hello-world
Output
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
9bb5a5d4561a: Pull complete
Digest: sha256:3e1764d0f546ceac4565547df2ac4907fe46f007ea229fd7ef2718514bcec35d
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.
...

Docker ban đầu không thể tìm thấy image hello-world, vì vậy nó đã tải xuống hình ảnh từ Docker Hub, là kho lưu trữ mặc định. Khi hình ảnh được tải xuống, Docker đã tạo một vùng chứa từ hình ảnh và ứng dụng trong vùng chứa được thực thi, hiển thị thông báo.

Bạn có thể tìm kiếm hình ảnh có sẵn trên Docker Hub bằng cách sử dụng lệnh docker search . Ví dụ: để tìm kiếm hình ảnh Ubuntu, hãy gõ:

docker search ubuntu

Tập lệnh sẽ thu thập dữ liệu Docker Hub và trả về một danh sách tất cả các hình ảnh có tên khớp với chuỗi tìm kiếm. Trong trường hợp này, đầu ra sẽ tương tự như sau:

Output
NAME                                                      DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
ubuntu                                                    Ubuntu is a Debian-based Linux operating sys…   7917                [OK]
dorowu/ubuntu-desktop-lxde-vnc                            Ubuntu with openssh-server and NoVNC            193                                     [OK]
rastasheep/ubuntu-sshd                                    Dockerized SSH service, built on top of offi…   156                                     [OK]
ansible/ubuntu14.04-ansible                               Ubuntu 14.04 LTS with ansible                   93                                      [OK]
ubuntu-upstart                                            Upstart is an event-based replacement for th…   87                  [OK]
neurodebian                                               NeuroDebian provides neuroscience research s…   50                  [OK]
ubuntu-debootstrap                                        debootstrap --variant=minbase --components=m…   38                  [OK]
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5      ubuntu-16-nginx-php-phpmyadmin-mysql-5          36                                      [OK]
nuagebec/ubuntu                                           Simple always updated Ubuntu docker images w…   23                                      [OK]
tutum/ubuntu                                              Simple Ubuntu docker images with SSH access     18
i386/ubuntu                                               Ubuntu is a Debian-based Linux operating sys…   13
ppc64le/ubuntu                                            Ubuntu is a Debian-based Linux operating sys…   12
1and1internet/ubuntu-16-apache-php-7.0                    ubuntu-16-apache-php-7.0                        10                                      [OK]
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mariadb-10   ubuntu-16-nginx-php-phpmyadmin-mariadb-10       6                                       [OK]
eclipse/ubuntu_jdk8                                       Ubuntu, JDK8, Maven 3, git, curl, nmap, mc, …   6                                       [OK]
codenvy/ubuntu_jdk8                                       Ubuntu, JDK8, Maven 3, git, curl, nmap, mc, …   4                                       [OK]
darksheer/ubuntu                                          Base Ubuntu Image -- Updated hourly             4                                       [OK]
1and1internet/ubuntu-16-apache                            ubuntu-16-apache                                3                                       [OK]
1and1internet/ubuntu-16-nginx-php-5.6-wordpress-4         ubuntu-16-nginx-php-5.6-wordpress-4             3                                       [OK]
1and1internet/ubuntu-16-sshd                              ubuntu-16-sshd                                  1                                       [OK]
pivotaldata/ubuntu                                        A quick freshening-up of the base Ubuntu doc…   1
1and1internet/ubuntu-16-healthcheck                       ubuntu-16-healthcheck                           0                                       [OK]
pivotaldata/ubuntu-gpdb-dev                               Ubuntu images for GPDB development              0
smartentry/ubuntu                                         ubuntu with smartentry                          0                                       [OK]
ossobv/ubuntu
...

Ở cột OFFICIAL , OK chỉ ra image được xây dựng và hỗ trợ bởi 1 công ty bên cạnh project đó. Khi bạn xác định được image nào bạn muốn sử dụng thì bạn có thể down nó về sử dụng câu lệnh pull

Thực thi câu lệnh để tải image ubuntu về máy:

docker pull ubuntu

Kết quả:

Using default tag: latest
latest: Pulling from library/ubuntu
6b98dfc16071: Pull complete
4001a1209541: Pull complete
6319fc68c576: Pull complete
b24603670dc3: Pull complete
97f170c87c6f: Pull complete
Digest: sha256:5f4bdc3467537cbbe563e80db2c3ec95d548a9145d64453b06939c4592d67b6d
Status: Downloaded newer image for ubuntu:latest

Sau khi tải image, bạn có thể chạy container đang sử dụng image vừa được tải xuống bằng lệnh run. Như bạn thấy với ví dụ hello-world, nếu một image chưa được tải xuống khi docker thực thi với lệnh run, Docker sẽ down image đó và sau đó chạy container để xử dụng nó.

Để thấy image vừa được tải về máy, sử dụng:

docker images

Kết quả:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              113a43faa138        4 weeks ago         81.2MB
hello-world         latest              e38bc07ac18e        2 months ago        1.85kB

Như bạn sẽ thấy sau trong hướng dẫn này, image mà bạn sử dụng để chạy container có thể được sửa đổi và sử dụng để tạo image mới, sau đó có thể được tải lên (đẩy là thuật ngữ kỹ thuật) vào Docker Hub hoặc các đăng ký Docker khác.

Hãy xem cách chạy container chi tiết hơn.

 

Step 5 — Chạy Docker Container

Ví dụ: hãy chạy một container bằng image mới nhất của Ubuntu. Sự kết hợp của  -i-t cung cấp cho bạn quyền bằng lệnh shell truy cập container:

docker run -it ubuntu

Lệnh trên của bạn sẽ thay đổi để phản ánh thực tế rằng bạn hiện đang làm việc bên trong container và sẽ ở dạng này:

Kết quả:
[email protected]:/#

Lưu ý id container trong dấu nhắc lệnh. Trong ví dụ này, nó là d9b100f2f636. Bạn sẽ cần ID container đó sau để xác định container khi bạn muốn xóa nó.

Bây giờ bạn có thể chạy bất kỳ lệnh nào trong container. Ví dụ: hãy cập nhật cơ sở dữ liệu gói bên trong container. Bạn không cần phải thêm tiền tố vào bất kỳ lệnh nào với sudo, vì bạn đang hoạt động bên trong vùng chứa với tư cách là người dùng root:

apt update

Then install any application in it. Let’s install Node.js:

apt install nodejs

Điều này cài đặt Node.js trong kho lưu trữ chính thức của Ubuntu. Khi quá trình cài đặt kết thúc, kiểm tra lại node.js được cài đặt:

node -v

Bạn sẽ nhìn thấy version vừa được cài đặt

v8.10.0

Bất cứ thay đổi nào của bạn trong container chỉ áp dụng cho container đó.

Để thoát khỏi container, dùng lệnh exit:

Hãy xem xét việc quản lý các container trên hệ thống:

Step 6 — Quản lý Docker Containers

Sau khi sử dụng Docker một thời gian, bạn sẽ có nhiều thùng chứa hoạt động (đang chạy) và không hoạt động trên máy tính của mình. Để xem những người đang hoạt động, sử dụng:

docker ps

Bạn sẽ thấy đầu ra tương tự như sau:

CONTAINER ID        IMAGE               COMMAND             CREATED             

Trong hướng dẫn, chúng ta dùng 2 containerhello-world imageubuntu image. Cả 2 container đều đang không chạy, nhưng vẫn tồn tại trên hệ thống, để xem toàn bộ container, đang hoạt động và không hoạt động ta dùng lệnh docker ps -a

docker ps -a

Kết quảquả:

d9b100f2f636        ubuntu              "/bin/bash"         About an hour ago   Exited (0) 8 minutes ago                           sharp_volhard
01c950718166        hello-world         "/hello"            About an hour ago   Exited (0) About an hour ago                       festive_williams

Để nhìn container mới nhất mà bạn tạo, xử dụng docker ps -l

docker ps -l

CREATED             STATUS                      PORTS               NAMES
d9b100f2f636        ubuntu              "/bin/bash"         About an hour ago   Exited (0) 10 minutes ago                       sharp_volhard

Để khởi động 1 container đang không hoạt động, sử dụng docker start, theo sau là ID của container. ví dụ chúng ta muốn start container có ID là d9b100f2f636

docker start d9b100f2f636

Container sẽ start, và bạn có thể dùng docker ps để check trạng thái của nó:

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
d9b100f2f636        ubuntu              "/bin/bash"         About an hour ago   Up 8 seconds                            sharp_volhard

Để dừng container đang chạy, sử dụng docker stop, theo sau là ID hay tên của docker. Bạn có thể xử dụng name để thay cho ID của container, ở đây chúng ta dùng tên là sharp_volhard:

docker stop sharp_volhard

Khi bạn đã quyết định rằng bạn không còn cần một container nữa, hãy xóa nó bằng lệnh docker rm, một lần nữa sử dụng ID container hoặc name. Sử dụng lệnh docker ps -a để tìm ID container hoặc tên cho vùng chứa được liên kết với image hello-world và xóa nó.

docker rm festive_williams

Bạn có thể bắt đầu một container mới và đặt tên cho nó bằng cách sử dụng khóa chuyển đổi –name. Bạn cũng có thể sử dụng –rm để tạo 1 container có thể tự xoá khi dừng hoạt động. Xem lệnh trợ giúp chạy docker để biết thêm thông tin về các tùy chọn này và các tùy chọn khác.

Các container có thể được biến thành các hình ảnh mà bạn có thể sử dụng để xây dựng các container mới. Hãy xem cách nó hoạt động.

Step 7 — Committing Changes in a Container to a Docker Image

Khi bắt đầu xử dụng Docker image, bạn có thể tạo, sửa và xoá file

Khi bạn khởi động Docker image, bạn có thể tạo, sửa đổi và xóa các tệp giống như bạn có thể với một máy ảo. Những thay đổi mà bạn thực hiện sẽ chỉ áp dụng cho container đó. Bạn có thể khởi động và dừng nó, nhưng một khi bạn phá hủy nó bằng lệnh docker rm, các thay đổi sẽ bị mất hoàn toàn.

Trong phần hướng dẫn này cho bạn biết cách lưu trạng thái của một container dưới dạng Docker image mới.

Sau khi cài đặt Node.js bên trong Ubuntu container, bây giờ bạn có một container chạy image, nhưng container khác với image bạn đã sử dụng để tạo nó. Nhưng bạn có thể muốn sử dụng lại container Node.js này làm cơ sở cho các image mới sau này.

Sau đó, commit các thay đổi tới Docker image instance sử dụng lệnh:

docker commit -m "What you did to the image" -a "Author Name" container_id repository/new_image_name

Sử dung -m để đưa lên message giúp bạn hay bất kì ai đó biết bạn đang thay đổi gì, -a được sử dụng để biết về tác giả. container_id là cái bạn đã được lưu ý trong hướng dẫn khi bắt đầu dùng Docker. Trừ khi bạn tạo các kho lưu trữ bổ xung trên Docker Hub, các repository thường là username Docker Hub của bạn.

Ví dụ, có 1 account là sammy, với container IDd9b100f2f636 :

docker commit -m "added Node.js" -a "sammy" d9b100f2f636 sammy/ubuntu-nodejs

Khi bạn commit 1 image, image mới được lưu local tại máy tính của bạn. Sau đây trong hướng dẫn này, bạn sẽ học được cách đưa 1 image lên Docker registry giống như Docker Hub để người khác có thể truy cập nó.

Liệt kê lại các hình ảnh Docker sẽ hiển thị hình ảnh mới, cũng như hình ảnh cũ mà nó được lấy từ:

docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
sammy/ubuntu-nodejs   latest              7c1f35226ca6        7 seconds ago       179MB
ubuntu                   latest              113a43faa138        4 weeks ago         81.2MB
hello-world              latest              e38bc07ac18e        2 months ago        1.85kB

 

Trong ví dụ trên, ubuntu-nodejs là 1 image mới, được lấy từ image ubuntu đã có sẵn trên Docker Hub. Sự khác biệt kích cỡ phản ánh những thay đổi đã được thực hiện. Và trong ví dụ, sự thay đổi là việc Nodejs đã được cài đặt. Vì vậy, lần tới khi bạn cần chạy một container bằng Ubuntu với NodeJS được cài đặt sẵn, bạn chỉ việc sử dụng hình ảnh mới.

Bạn cũng có thể xây dựng Hình ảnh từ Dockerfile, cho phép bạn tự động hóa việc cài đặt phần mềm trong một hình ảnh mới. Tuy nhiên, đó là ngoài phạm vi của hướng dẫn này.

Bây giờ, hãy chia sẻ image mới với những người khác để họ có thể tạo các container từ nó.

Step 8 — Pushing Docker Images to a Docker Repository

Bước hợp lý tiếp theo sau khi tạo một image mới từ một image có sẵn là chia sẻ nó với một vài người bạn của bạn, tất cả có trên Docker Hub hoặc đăng ký Docker registry khác mà bạn có quyền truy cập. Để đẩy một image đến Docker Hub hoặc bất kỳ Docker registry nào khác, bạn phải có một tài khoản ở đó.

Phần này cho bạn biết cách đẩy hình ảnh Docker lên Docker Hub.

Để push được image, bạn cần login docker:

docker login -u docker-registry-username

Bạn sẽ được nhắc xác thực bằng mật khẩu Docker Hub. Nếu bạn điền đúng đúng mật khẩu, xác thực sẽ thành công.

Chú ý: nếu tên đăng nhập Docker registry của bạn khác so với tên đăng nhập trên local bạn sử dụng để tạo image, bạn sẽ phải gắn thẻ image với tên đăng nhập đăng ký của bạn. Ví dụ như sau:

docker tag sammy/ubuntu-nodejs docker-registry-username/ubuntu-nodejs

Sau đó bạn có thể đẩy image bằng cách:

docker push docker-registry-username/docker-image-name

Để đẩy ubuntu-nodejs image tới sammy repository, bạn sử dụng:

docker push sammy/ubuntu-nodejs

Quá trình có thể mất một chút thời gian để hoàn thành khi nó tải lên hình ảnh, nhưng khi hoàn thành, đầu ra sẽ như thế này:

The push refers to a repository [docker.io/sammy/ubuntu-nodejs]
e3fbbfb44187: Pushed
5f70bf18a086: Pushed
a3b5c80a4eba: Pushed
7f18b442972b: Pushed
3ce512daaf78: Pushed
7aae4540b42d: Pushed

...


Sau khi đẩy image vào sổ đăng ký, nó sẽ được liệt kê trên bảng điều khiển của tài khoản của bạn, giống như hiển thị trong hình ảnh bên dưới.

Nếu một nỗ lực đẩy dẫn đến một lỗi loại này, thì có khả năng bạn đã không đăng nhập:

The push refers to a repository [docker.io/sammy/ubuntu-nodejs]
e3fbbfb44187: Preparing
5f70bf18a086: Preparing
a3b5c80a4eba: Preparing
7f18b442972b: Preparing
3ce512daaf78: Preparing
7aae4540b42d: Waiting
unauthorized: authentication required

Đăng nhập lại với docker login và thực hiện lại việc đăng nhập. Sau đó xác minh rằng nó tồn tại trên trang kho Docker Hub của bạn.

Bạn có thể dùng docker pull sammy/ubuntu-nodejs để tải image tới một máy mới và sử dụng và chạy một container mới.

Kết luận

Trong hướng dẫn này, bạn đã cài đặt Docker, làm việc với image và container, và đẩy một image được sửa đổi vào Docker Hub.

 

Source:

https://www.digitalocean.com/community/tutorials/how-to-các công tắcinstall-and-ucác công tắcse-docker-on-ubuntu-18-04

Tags

Leave a Reply

Your email address will not be published. Required fields are marked *

Close