在学习和使用Docker的过程中整理的一些概念和技巧。U1:1,Docker真好用( ̄▽ ̄)”
容器
- 容器是对应用程序及其依赖关系的封装
- 轻量
- 容器能与操作系统共享资源,因此其效率高出一个数量级
- 容器的性能损耗非常低
- 容器具有可移植性
- 容器适用于微服务架构
- 主机的内核与容器共享
- 容器中的进程与主机自身等价
有点累了先休息一会 ( ̄▽ ̄)”…..然后休息了好几个月,自从学了一些基础的命令之后觉得没有什么用就放在了一边 借口)😅然后后来实习的时候又感觉好有用就又捡回来了
一些常用的操作
安装docker
1 | curl https://get.docker.com > install_docker.sh |
dockerfile
简单的来说就是用来构建镜像的时候用的,下面是一个制作带有kubectl
命令的简单的例子:
1 | FROM ubuntu:16.04 |
然后,使用如下的docker命令来构建镜像(Windwos)
1 | set IMAGE=<image_name, tag and etc.> |
在docker容器以及host之间传输文件
使用
docker cp <path> <containerName>:<path>
从宿主机复制文件出来使用
docker cp <containerName>:<path> <path>
从docker中复制文件出来
docker without sudo
在ubuntu直接安装docker之后会出现docker命令需要使用sudo才能够执行的情况,然后在stackoverflow上找了一个有效的解决方法
1 | sudo groupadd docker |
挂载卷
还有两种方法进行卷挂在来着,但是因为现在主要炼丹,并用不到,还是下面的更加常用一些
1 | docker run -v /host/dir:/container/dir debian |
将docker镜像保存成tar文件
1 | docker save -o [文件名] [镜像名] |
加载保存成文件的docker镜像
1 | docker load -i [文件名] |
将容器提交成为镜像
1 | docker commit -m "commit message" -a "author info" <container_id> [<repostory>[/<tag>]] |
直接将容器到处至tar
1 | docker export [container name] > [file name] # 使用docker import倒入 |
暂停容器
1 | docker pause <container_id> # 暂停容器中的所有进程 |
暂停容器内所有的进程,容器中的进程不会收到任何信号。在Linux底层使用cgroup freezer功能实现。
容器的attach以及detach
1 | docker attach <container_id> # attach到一个容器中 |
docker账户相关文件位置
~/.docker/config.json
在docker中使用摄像头或者其他设备
1 | # 以摄像头为例子 |
之后就可以在docket容器中愉快地调用摄像头啦
端口相关
1 | docker run -P -d radis # 在host开一个高端口映射到容器中 |
在Docker容器中使用图形界面
虽然不是很懂,但是好像能用了( ̄▽ ̄)”
1 | xhost +local:docker |
随后可以使用如下命令测试效果
1 | apt install x11-apps |
其他
1 | docker top <container_id> # 类似ps,至显示容器内的进程,默认`-ef` |
1 | docker run -u $(id -u):$(id -g) -v ... args |
1 | docker system prune |
1 | docker run ... -h HOST_NAME ... |
一些需要注意的问题
在使用Dockerfile进行构建的时候,最好将Dockerfile以及相关文件放进一个目录中。这样做的原因是Docker在进行构建的时候会把Docker所在的目录打包成为一个tar文件,传递给Docker的守护进程。
基础镜像一般会包含安全补丁,因此应当定时更新