How to build Your First Alpine Docker Image and Push it to DockerHub

Tested Infrastructure

Platform Number of Instance Reading Time
Play with Docker 1 5 min

Pre-requisite

Under this tutorial we will see how to build our own first alpine based Docker Image.

$ docker run -dit alpine sh 620e1bcb5ab6e84b75a7a5c35790a77691112e59830ea1d5d85244bc108578c9 [node4] (local) root@192.168.0.20 ~ 
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 620e1bcb5ab6 alpine "sh" 3 seconds ago Up 2 seconds keen_alba ttani 
[node4] (local) root@192.168.0.20 ~ $ docker attach 62 / # / # / # cat /etc/os-release NAME="Alpine Linux" ID=alpine VERSION_ID=3.9.2 PRETTY_NAME="Alpine Linux v3.9" HOME_URL="https://alpinelinux.org/" BUG_REPORT_URL="https://bugs.alpinelinux.org/" / # 

Updating APK Packages

/ # apk update fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/main/x86_64/APKINDEX.tar.gz fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/community/x86_64/APKINDEX.tar.gz v3.9.2-21-g3dda2a36ce [http://dl-cdn.alpinelinux.org/alpine/v3.9/main] v3.9.2-19-gfdf726d41a [http://dl-cdn.alpinelinux.org/alpine/v3.9/community] OK: 9756 distinct packages available / # ^ 
/ # apk add git (1/7) Installing ca-certificates (20190108-r0) (2/7) Installing nghttp2-libs (1.35.1-r0) (3/7) Installing libssh2 (1.8.0-r4) (4/7) Installing libcurl (7.64.0-r1) (5/7) Installing expat (2.2.6-r0) (6/7) Installing pcre2 (10.32-r1) (7/7) Installing git (2.20.1-r0) Executing busybox-1.29.3-r10.trigger Executing ca-certificates-20190108-r0.trigger OK: 20 MiB in 21 packages / # 

Now lets come out of it by Ctrl+P+Q and commit the changes

$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 620e1bcb5ab6 alpine "sh" 4 minutes ago Up 4 minutes keen_alba ttani [node4] (local) root@192.168.0.20 ~ $ docker commit -m "Added GIT" 620 ajeetraina/alpine-git sha256:9a8cd6c3bd8761013b2b932c58af2870f5637bfdf4227d7414073b0458ed0c54 [node4] (local) root@192.168.0.20 ~ $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ajeetraina/alpine-git latest 9a8cd6c3bd87 11 seconds ago 31.2MB ubuntu latest 94e814e2efa8 3 days ago 88.9MB alpine 3.6 43773d1dba76 7 days ago 4.03MB alpine 3.7 6d1ef012b567 7 days ago 4.21MB alpine 3.8 dac705114996 7 days ago 4.41MB alpine 3.9 5cb3aa00f899 7 days ago 5.53MB alpine latest 5cb3aa00f899 7 days ago 5.53MB 

There you see a new image just created.

Time to tag the image

$ docker tag --help Usage: docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG] Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE [node4] (local) root@192.168.0.20 ~ $ docker tag ajeetraina/alpine-git:latest ajeetraina/alpine-git:1.0 
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ajeetraina/alpine-git 1.0 9a8cd6c3bd87 2 minutes ago 31.2MB ajeetraina/alpine-git latest 9a8cd6c3bd87 2 minutes ago 31.2MB ubuntu latest 94e814e2efa8 3 days ago 88.9MB alpine 3.6 43773d1dba76 7 days ago 4.03MB alpine 3.7 6d1ef012b567 7 days ago 4.21MB alpine 3.8 dac705114996 7 days ago 4.41MB alpine 3.9 5cb3aa00f899 7 days ago 5.53MB alpine latest 5cb3aa00f899 7 days ago 5.53MB 

Pushing it to DockerHub

$ docker login 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: ajeetraina 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 [node4] (local) root@192.168.0.20 ~ 
$ docker push ajeetraina/alpine-git:1.0 The push refers to repository [docker.io/ajeetraina/alpine-git] 3846235f8c17: Pushed bcf2f368fe23: Mounted from library/alpine 1.0: digest: sha256:85d50f702e930db9e5b958387e667b7e26923f4de340534085cea184adb8411e size: 740 [node4] (local) root@192.168.0.20 ~ 

Next » Building Docker Image from Scratch