前言 平常每周都会有一些心得感悟,这些在大家工作中可能会有许多共性。我觉得花一些时间整理一下,跟粉丝读者们分享一下日常学习工作的想法和所得,这是一个很好的互动和文章分享的痛点。
这是第十九篇。
最近有几次把虚拟机给搞死了,浪费了时间又重新安装了虚拟机。就是我在编译GmSSL这个库的时候,按默认的编译成动态库的话,他会替换系统自带的openssl.so,然后重启的时候,系统就嗝屁了。好像是找不到正确的版本依赖了。GmSSL内部自己依赖了一个openssl的版本,直接把系统的so替换了,应该是版本不兼容导致启动失败的。
嗯,然后就想着搞个docker容器来作实验,花了点时间看了一下docker。
docker 基本原理 docker和虚拟机都是虚拟化的产物。但是虚拟机本身自带了操作系统,操作系统会额外消耗资源。虚拟机完全虚拟化了一套虚拟的资源出来使用。而docker的容器更加轻量级,启动也更快。docker容器共用宿主机的操作系统,不需要额外的消耗。在同样的资源下,容器更加方便、轻量,能够运行更多的实例。
安装 docker是一个虚拟化的平台,通过docker可以管理镜像,然后通过镜像可以创建容器。镜像就相当于类模板,而容器就是模板的一个实例,基于同一个镜像可以创建多个容器。不同的容器有特定的ID后者名称来定位区分。当然,镜像也有镜像的ID和名称、标签来区分。
1 2 wget -qO- https://get.docker.com/ | sh usermod -aG docker keep
直接运行就可以安装了。
pull镜像 安装之后,需要从仓库pull镜像,镜像由不同的组织上传,提供不同的应用。
1 2 3 4 5 6 7 8 9 10 11 12 root@keep-VirtualBox:/etc/docker# docker pull ubuntu Using default tag: latest latest: Pulling from library/ubuntu 8527c5f86ecc: Pull complete Digest: sha256:2a7dffab37165e8b4f206f61cfd984f8bb279843b070217f6ad310c9c31c9c7c Status: Downloaded newer image for ubuntu:latest docker.io/library/ubuntu:latest root@keep-VirtualBox:/etc/docker# root@keep-VirtualBox:/etc/docker# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 3f4714ee068a 28 hours ago 77.8MB
运行容器 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 root@keep-VirtualBox:/etc/docker# docker container run -it ubuntu /bin/bash root@438ebf3447a6:/# root@438ebf3447a6:/# # Ctrl + PQ 退出容器, 容器依旧在运行 root@438ebf3447a6:/# root@keep-VirtualBox:/etc/docker# root@keep-VirtualBox:/etc/docker# root@keep-VirtualBox:/etc/docker# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 438ebf3447a6 ubuntu "/bin/bash" 2 minutes ago Up 2 minutes naughty_thompson root@keep-VirtualBox:/etc/docker# # 连接回容器 root@keep-VirtualBox:/etc/docker# docker exec -it 438ebf3447a6 bash root@438ebf3447a6:/# root@438ebf3447a6:/# # 停止容器 root@keep-VirtualBox:/etc/docker# docker stop naughty_thompson naughty_thompson root@keep-VirtualBox:/etc/docker# root@keep-VirtualBox:/etc/docker# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES root@keep-VirtualBox:/etc/docker# docker ps -a // -a 列出所有容器 包括停止的容器 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 438ebf3447a6 ubuntu "/bin/bash" 6 minutes ago Exited (137) 17 seconds ago naughty_thompson root@keep-VirtualBox:/etc/docker# # 删除容器 root@keep-VirtualBox:/etc/docker# docker rm naughty_thompson naughty_thompson root@keep-VirtualBox:/etc/docker# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES root@keep-VirtualBox:/etc/docker# # 一直运行 退出自动重启 root@keep-VirtualBox:/etc/docker# docker container run --name auto-restart -it --restart always ubuntu sleep 10
容器文件存储 多个容器要共享数据的话,可以创建一个卷, 然后运行时分别挂载这个卷,这样大家都可以访问数据了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 root@keep-VirtualBox:~# docker container run -dit --name voltainer --mount source=myvol,target=/vol ubuntu root@keep-VirtualBox:~# docker exec -it voltainer bash root@c04fd0703202:/# root@c04fd0703202:/# df -h Filesystem Size Used Avail Use% Mounted on overlay 98G 53G 41G 57% / tmpfs 64M 0 64M 0% /dev tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup shm 64M 0 64M 0% /dev/shm /dev/sda5 98G 53G 41G 57% /vol tmpfs 3.9G 0 3.9G 0% /proc/asound tmpfs 3.9G 0 3.9G 0% /proc/acpi tmpfs 3.9G 0 3.9G 0% /proc/scsi tmpfs 3.9G 0 3.9G 0% /sys/firmware root@c04fd0703202:/# cd /vol/ root@c04fd0703202:/vol# ls root@c04fd0703202:/vol# root@c04fd0703202:/vol# touch test.file root@c04fd0703202:/vol# vi test.file
创建的卷默认路径在 /var/lib/docker/volumes/下面,我们进去在_data下就可以看到创建的文件test.file了。
1 2 3 4 5 6 7 8 9 root@keep-VirtualBox:/# cd /var/lib/docker/volumes/ root@keep-VirtualBox:/var/lib/docker/volumes# root@keep-VirtualBox:/var/lib/docker/volumes# ls backingFsBlockDev metadata.db myvol root@keep-VirtualBox:/var/lib/docker/volumes# cd myvol/_data/ root@keep-VirtualBox:/var/lib/docker/volumes/myvol/_data# ls test.file root@keep-VirtualBox:/var/lib/docker/volumes/myvol/_data#
容器运行的基础操作就这些, 后面还有更高级的功能待学习。
问题 下载image超时 1 2 3 4 5 6 7 8 9 10 11 root@keep-VirtualBox:~/docker_repo# docker pull ubuntu:latest Error response from daemon: Head "https://registry-1.docker.io/v2/library/ubuntu/manifests/lastest": net/http: TLS handshake timeout # docker默认的源为国外官方源,下载速度较慢,需修改docker镜像源为国内 # 修改 /etc/docker/daemon.json 不存在则创建文件,并增加内容: { "registry-mirrors":["https://pee6w651.mirror.aliyuncs.com"] }
行动,才不会被动!
欢迎关注个人公众号 微信 -> 搜索 -> fishmwei,沟通交流。
博客地址: https://fishmwei.github.io/ 掘金主页: https://juejin.cn/user/2084329776486919