Cara Membuat Docker image dan Upload ke Docker Hub
Secara default, Docker image bisa kita dapatkan dari Docker registry di Docker Hub. Docker image bisa juga kita buat sendiri, apakah itu dari container yang sudah ada atau build dari Dockerfile. Nah, pada seri tutorial Docker kali ini kita akan belajar bagaimana cara membuat Docker image dan juga upload (push) Docker image ke registry.
Cara Pertama: Build dari container
Pada tutorial sebelumnya kita telah belajar bagaimana cara deploy website HTML dengan metode copy file website ke dalam container. Container tersebut bisa kita jadikan image.
Misalnya membuat Docker image dengan nama web-freelancer:v1 dari container web-freelancer.
1 | docker commit web-freelancer web-freelancer:v1 |
Menampilkan Docker images untuk mengetahui apakah image yang dibuat sudah tercipta.
1 | docker images |
Contoh hasil perintah di atas.
1 2 | REPOSITORY TAG IMAGE ID CREATED SIZE web-freelancer v1 0086656c5db9 7 seconds ago 844MB |
Cara Kedua: Build dari Dockerfile
Dockerfile adalah sebuah file teks konfigurasi yang mendeskripsikan instruksi atau perintah yang dijalankan saat proses pembuatan Docker image.
Membuat Dockerfile.
1 | nano Dockerfile |
Isi dari Dockerfile.
1 2 3 4 5 | FROM nginx:stable-alpine COPY freelancer/. /usr/share/nginx/html EXPOSE 80 CMD ["nginx", "-g", "daemon off;"] |
- FROM = basis image yang digunakan
- LABEL maintainer = nama pembuat
- COPY = copy isi folder ke folder di container
- EXPOSE = buka (publish) port 80
- CMD = perintah yang dijalankan
Jalankan perintah build image yang menghasilkan image dengan nama web-freelancer:v1.
1 | docker build -t web-freelancer:v1 . |
Contoh hasil perintah di atas.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | Sending build context to Docker daemon 647.2kB Step 1/5 : FROM nginx:stable-alpine ---> e1ccef1fb908 ---> Running in 9d5ec8ad6e66 Removing intermediate container 9d5ec8ad6e66 ---> e1d4af9c4a81 Step 3/5 : COPY freelancer/. /usr/share/nginx/html ---> 2427540472a7 Step 4/5 : EXPOSE 80 ---> Running in ee5755a4d8ab Removing intermediate container ee5755a4d8ab ---> 86ceb19cc687 Step 5/5 : CMD ["nginx", "-g", "daemon off;"] ---> Running in 4f57d1a56fe3 Removing intermediate container 4f57d1a56fe3 ---> 1915e927a451 Successfully built 1915e927a451 Successfully tagged web-freelancer:v1 |
Menampilkan Docker images.
1 2 3 4 | docker images REPOSITORY TAG IMAGE ID CREATED SIZE web-freelancer v1 1915e927a451 24 seconds ago 23.1MB |
Informasi lengkap mengenai Docker build baca di docs.docker.com.
Upload (push) image
Selanjutnya kita akan upload (push) image ke Docker registry, Docker Hub.
Buatlah akun terlebih dahulu di hub.docker.com.
Login ke Docker Hub.
1 | docker login |
Contoh hasil perintah di atas.
1 2 3 4 5 6 7 8 | Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. Username: musaamin Password: WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded |
image yang akan di-push harus menyertakan username registry. Misalnya username saya adalah musaamin, berarti nama images harus musaamin/repository:tag.
Kita ubah dulu image sebelumnya web-freelancer:v1 menjadi musaamin/web-freelancer:v1.
1 | docker tag web-freelancer:v1 musaamin/web-freelancer:v1 |
Tampilkan kembali docker images untuk melihat hasilnya.
1 2 3 4 5 | docker images REPOSITORY TAG IMAGE ID CREATED SIZE web-freelancer v1 1915e927a451 15 minutes ago 23.1MB musaamin/web-freelancer v1 1915e927a451 15 minutes ago 23.1MB |
Sekarang push ke registry.
1 | docker push musaamin/web-freelancer:v1 |
Contoh hasil perintah di atas.
1 2 3 4 5 6 7 8 9 | The push refers to repository [docker.io/musaamin/web-freelancer] 1338f25d181c: Pushed a7c11ed26fd5: Pushed 6e8309ec6bfd: Pushed 7ff80c2c03d5: Pushed 35e4637a9d6c: Pushed b5d14f4aebad: Pushed b2d5eeeaba3a: Pushed v1: digest: sha256:2b0e45056281ad3fea049bc91baf0373d64ff64a626b76b64d224e819ea3dead size: 1778 |
Cek di hub.docker.com, apakah image berhasil di-push.
Download (pull) image
Uji coba download (pull) image yang telah di-push sebelumnya.
1 | docker pull musaamin/web-freelancer:v1 |
Uji coba membuat container.
1 | docker run -d -p 80:80 --name web web-freelancer:v1 |
Tampilkan container.
1 2 3 4 | docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES de139a9c6f50 web-freelancer:v1 "/docker-entrypoint.…" 43 seconds ago Up 41 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp web |
Selamat mencoba 🙂
kalo semisal pakai service apache2 dan mysql bagaimana mas?
ya harus menambahkan apache dan mysql. coba googling
dockerfile lamp