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、

  1. 如果正常进入 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

Last modification:October 14, 2020
如果觉得我的文章对你有用,请随意赞赏