快速开始

docker可以理解为轻量级的虚拟机,它可以把应用程序放在独立的环境中运行

最简单的docker命令:

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
44
45
46
47
48
49
50
docker run ubuntu echo hello docker
docker run nginx

docker images # 查看本地所有镜像

docker run -p 8080:80 -d nginx # nginx 80端口映射到本地8080端口,下面的字符串表示容器id ,-d表示守护进程
06dcb2f35caa00ba89faae92e1fc42917ccafeecf363f3a057ea75aede66eb78

docker ps # 看看正在运行的容器
docker cp index.html 06dcb2f35caa://usr/share/nginx/html # 将本地文件拷贝进docker对应目录
docker stop 06dcb2f35caa

docker在容器内所做的改动都是暂时的,所以改动容器内的内容停止容器后再开启,网页不会发生变化。需要使用commit命令保存更改

docker commit -m "fun” 67791ea2402f1401c nginx-fun
sha256:db3845fd93625e56c9234c2622a3ea89126732323534ff449871a027ad8330e8 # 新产生的image id

docker rmi db3845fd9362 # 删除image

docker ps -a # 查看所有运行过的images
docker rm 2e61f26e9f41 7bde03e544e8 # 删除container

从Dockerfile构建镜像
https://stackoverflow.com/questions/41286028/docker-build-error-checking-context-cant-stat-c-users-username-appdata

mkdir dockerfiles && cd dockerfiles

cat Dockerfile
FROM alpine:latest
MAINTAINER xbf
CMD echo "hello docker”

docker build -t hello-docker

mkdir dockerfiles2 && cd dockerfiles2
cat “today is sunday” > iindex.html
cat Dockerfile
FROM ubuntu
MAINTAINER xbf
RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y nginx
COPY index.html /var/www/html
ENTRYPOINT ["/usr/sbin/nginx","-g",”daemon off;"]
EXPOSE 80

docker build -t xbf/hello-nginx .
docker run -d -p 80:80 xbf/hello-nginx

http :80

Dockerfile中每一行对应一个层,对应一个独立ID

Volume提供了独立于容器之外的持久化存储

1
2
docker run -d --name nginx -v /usr/share/nginx/html nginx
docker inspect nginx

另一个终端执行

1
2
3
4
5
6
7
8
9
10
11
12
screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty
cd /var/lib/docker/volumes/eceb621c68f44291c8f1cf9964c3425ed23ac95f726e67f7e551375df13671ee/_data # docker inspect 的 Mounts -> Source
echo aaa >> index.html

docker exec -it nginx /bin/bash
cd /usr/share/nginx/html/
cat index.html # 发现末尾追加了aaa

docker run -p 80:81 -d -v $PWD/html:/usr/share/nginx/html nginx #将本地目录挂载到容器的对应目录

mkdir vol && cd vol && mkdir data
docker create -v $PWD/data:/var/mydata --name data_container ubuntu # 产生一个仅有数据的容器

进入容器

1
2
3
4
docker run -it --volumes-from data_container ubuntu /bin/bash
root@5da2d3f8e973:/#mount | grep mydata
root@5da2d3f8e973:/#osxfs on /var/mydata type fuse.osxfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other,max_read=1048576)
root@5da2d3f8e973:/#echo a > /var/mydata/a.txt

退出容器查看

1
cat data/a.txt

仅有数据的容器可以做到被多个容器挂载从而做到数据共享。

Registry本身是注册中心的意思,提供SASS服务,而非镜像的意思。目的是让大家共享镜像。

docker-compose

1
2
3
4
5
6
7
mkdir ghost && cd ghost
mkdir ghost && mkdir nginx && mkdir data

docker-compose rm
docker-compose stop
docker-compose build
docker-compose up -d