docker run ubuntu echo hello docker docker pull nginx #本地的8080端口映射到容器的80端口 docker run -p 8080:80 -d nginx curl 127.0.0.1:8080 docker ps #文件拷贝到容器 vi index.html docker ps docker cp index.html 05f67f3f819d://usr/share/nginx/html docker stop 05f67f3f819d docker run -p 8080:80 -d nginx curl http://localhost:8080 docker commit -m 'fun' 24dc41701283 nginx-fun docker images 删除镜像 docker rmi 9f139d4af874 docker stop 24dc41701283 docker ps -a docker rm 2cbeef6445dc
基础镜像,类比基本类 vi Dockerfile FROM alpine:latest MAINTAINER xhs CMD echo "Hello Docker!" docker pull alpine docker build -t hello_docker . docker images docker run hello_docker
#建Dockerfile 自己创建镜像 vi Dockerfile FROM ubuntu MAINTAINER xhs 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 xhs/hello-nginx . docker images docker run -d -p 80:80 xhs/hello-nginx curl localhost FROM 基础镜像 RUN 执行命令 ADD 包括网络文件 COPY 拷贝文件或目录 CMD 执行入口 ENTRYPOINT 没有指定ENTRYPOINT,就用CMD,指定了,CMD后字符串成为ENTRYPOINT的参数 WORKDIR 路径 ENV 环境变量 USER VOLUME 挂载卷 EXPOSE 暴露端口
Dockerfile每一行都产生一个新层 容器层可读可写 镜像层只读 相同层可以共享
volume 独立容器之外的持久化存储 docker run -d --name nginx -v /usr/share/nginx/html nginx docker inspect nginx ls /var/lib/docker/volumes/e1b94b6addbba7267594c8dbbc6c83534da02d292090e3781f49447fc4e02727/_data cd /var/lib/docker/volumes/e1b94b6addbba7267594c8dbbc6c83534da02d292090e3781f49447fc4e02727/_data cat index.html [root@localhost _data]# echo "it's 2018" > index.html [root@localhost ~]# docker exec -it nginx /bin/bash root@88840db4e4c2:/# cd /usr/share/nginx/html/ root@88840db4e4c2:/usr/share/nginx/html# cat index.html it's 2018 root@88840db4e4c2:/usr/share/nginx/html# #本地的目录挂载到容器里 docker run -p 80:80 -d -v $PWD/html:/usr/share/nginx/html nginx mkdir vol3 cd vol3/ mkdir data docker create -v $PWD/data:/var/mydata --name data_container ubuntu docker run -it --volumes-from data_container ubuntu /bin/bash root@775022803f20:/# mount | grep mydata /dev/mapper/centos-root on /var/mydata type xfs (rw,relatime,seclabel,attr2,inode64,noquota) root@775022803f20:/# cd /var/mydata/ root@775022803f20:/var/mydata# ls ls: cannot open directory '.': Permission denied root@775022803f20:/var/mydata# cd data bash: cd: data: No such file or directory root@775022803f20:/var/mydata# touch whatever.txt touch: cannot touch 'whatever.txt': Permission denied 解决Permission denied su -c "setenforce 0" chcon -Rt svirt_sandbox_file_t /path/to/volume https://stackoverflow.com/questions/24288616/permission-denied-on-accessing-host-directory-in-docker
Registry 镜像库 host 宿主机 registry 仓库 docker search docker pull docker push #国内的库 daocloud 时速云 阿里云 [root@localhost ~]# docker search whalesay INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.io/docker/whalesay An image for use in the Docker demo tutorial 632 docker.io docker.io/mendlik/docker-whalesay Docker whalesay image from training materi... 7 [OK] docker.io docker.io/caibar/whalesay Builds automatizados. 1 [OK] docker.io docker.io/milanfort/whalesay Modified docker/whalesay image that output... 1 docker.io docker.io/nikovirtala/whalesay Tiny Go web service to print Moby Dock ASC... 1 [OK] docker.io docker.io/ojenge/whalesay from docker/whalesay 1 docker.io docker.io/sabs1117/whalesay Whalesay with fortune phrases. 1 docker run docker.io/docker/whalesay cowsay 上午好 docker tag docker.io/docker/whalesay xhs/whalesay docker images docker push xhs/whalesay #登录 docker login