docker image 是什么?更详尽的文章:传送门
实验操作环境是用vagrant创建的centos7的虚拟机
用vagrant用户操作docker免去sudo
sudo groupadd docker
#安装完docker 其实docker用户就存在了 、可以不执行上面的命令
sudo gpasswd -a vagrant docker
#Adding user vagrant to group docker
重启docker服务、推出vagrant 并重新进入。
docker image的获取
方式1、dockerfile
简单制作一个image、用c编写个hello.c程序并编译成二进制文件
#include<stdio.h>
int main()
{
printf("hello docker\n");
}
编译可执行文件:gcc -static hello.c -o hello
vim Dockerfile
#编辑填写下面的内容
FROM scratch
ADD hello /
CMD ["/hello"]
build生成一个image
docker build -t a364482611/hello-word .
docker images
[vagrant@docker-host hello-world]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
a364482611/hello-word latest 015d6ae57373 3 minutes ago 861kB
ubuntu 14.04 f17b6a61de28 4 weeks ago 188MB
hello-world latest 4ab4c602aa5e 3 months ago 1.84kB
通过image ID 查看这个image的分层
docker history 015d6ae57373
运行这个image
docker run a364482611/hello-word
如果存在容器相关连,先删除容器在删除image
删除image –通过名字
docker rmi a364482611/hello-world
删除image –通过id
命令:docker image rm [image id] 删除image
docker image rm 015d6ae57373
方式2、docker Registry
通过registry远程获取image
docker pull ubuntu:14.04
ubuntu是从官方的docker hub拉取(不需要注册)。如果发布镜像则需要注册
官方的dockerhub网址:https://hub.docker.com
更改image的名称
docker images
docker tag 87cbe05e3b77 virtual_machine
docker container
查询正在运行的container容器
docker container ls
查看运行中和运行过的的container
docker container ls -a
直接进入容器里面
docker run -it --name=demo virtual_machine /bin/bash
交互式的运行container
docker run -it centos
#进入了centos中
如果出现 bash: docker: command not found
那么请在后面加入 /bin/bash
另起一个终端进入虚拟机查看
[vagrant@docker-host ~]$ docker container ls
常用命令:docker container ls -a 等于 docker ps -a
命令:docker container rm [container ID]
id可以简写成前几位、就是和其他不同例如
docker container rm d1
实际删除了 d198a8e08e55 这个id 。也可以直接使用命令
docker rm d1
清空所有container
docker rm $(docker container ls -aq )
清空已经退出的container
docker rm $(docker container ls -f "status=exited" -q)
后台、守护进程的方式运行container
docker pull python:2.7
docker run [python的 image id] #运行后自动退出
docker run -d [python的 image id]
对已经运行的container进行操作 exec
语法:docker exec 参数 容器id 命令
docker exec -it 8317cf220039 /bin/bash
exit 退出后、container还在运行
停止container
docker stop 8317cf220039
运行个容器并且命名为demo 。通过image的名字
docker run -d --name=demo a364482611/python
#停止
docker stop demo
查看container信息
docker inspect [容器 id]
用container重新生成一个image
运行centos的image
docker run -it centos
#进入虚拟机里面。yum install vim
退出、查看container id 重新生成一个image
[vagrant@docker-host hello-world]$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d3fe8ca6c7b2 centos "/bin/bash" 7 minutes ago Exited (0) 5 minutes ago nostalgic_dijkstra
nostalgic_dijkstra是这个容器的name
docker commit nostalgic_dijkstra a364482611/centos7-vim
查看image中的层
对docker container的系统资源的限制
如果不指定资源、那么container会占用最大的资源、根据容器运行的状况
docker run –help
–memory
。 如果不设定–memory-swap的值和–memory
假如命令是这样的:(此image来源下一章打包命令行工具的image)
docker run –memroy=200M a364482611/ubuntu-stress –vm 1 -v –vm-bytes 500M
那么实际测试为400M大小
–cpu-shares
占用cpu的权重比、越大占用资源越多
docker run --cpu-shares=10 a364482611/ubuntu-stress --vm 1 -v --vm-bytes 500M
docker使用套路之PHP
安装PHP、挑选一个比较小的PHP容器
可以先设定docker为中国镜像
vim /etc/docker/daemon.json
{
"experimental" : false,
"debug" : true,
"registry-mirrors" : [
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn",
"https://1yiq2dsw.mirror.aliyuncs.com",
"https://no1pfk8z.mirror.aliyuncs.com",
"http://hub-mirror.c.163.com"
]
}
阿里云的加速需要申请开发者后、生成专属的url地址
docker run -it --rm php:7.2.17-zts-alpine3.9 sh -c "php -v && php -m"
–rm的意思。用完后服务停止就删除
安装swoole、
- 如果正常进入 docker run -it –rm php:7.2.17-zts-alpine3.9 sh
使用pecl install swoole 会出错
原因缺少 autoconf 和m4。
在alpine里面,设置软件源
echo http://mirrors.ustc.edu.cn/alpine/v3.9/main > /etc/apk/repositories
echo http://mirrors.ustc.edu.cn/alpine/v3.9/community >> /etc/apk/repositories
apk update && apk upgrade
apk add m4 autoconf make
apk add gcc g++
docker-php-ext-install pdo_mysql sockets
pecl install swoole
pecl install redis
docker-php-ext-enable redis
docker-php-ext-enable swoole
docker使用套路之samba丝滑运行代码
在linux机器(或者虚拟机)里、安装samba。映射到本地机器磁盘开发
docker run -it -p 139:139 -p 445:445 --name smb -d --rm \
-v /home/qidong/backup:/mount \
dperson/samba \
-u "qidong;123" \
-s "qidong;/mount/;yes;no;yes;all;all;all" \
-w "WORKGROUP" \
-g "force user=qidong" \
-g "guest account=qidong"
-s
“qidong” 代表映射后访问的目录名称
-u
代表运行的用户和密码(这里的密码指的是、smaba服务的密码。非linux系统qidong用户的登录密码)
-g
全局配置
force user
指定的身分存取 samba 所提供的分享服務。
guest account
指定匿名访问的账户是谁
上面的的就可以无密码访问smaba并且修改文件
更好文章:https://blog.csdn.net/menghuanbeike/article/details/79190854