Docker

232 阅读4分钟
docker安装去官网
- 装完了得启动它systemctl start docker
- 卸载yum remove docker   rm -rf /var/lib/docker
- 由于docker仓库又是在国外,淘宝又自己做了一个自己的,可以修改配置让自己pull的时候快一点
- 镜像相关命令:
ls	查看全部镜像	docker image ls	
search	查找镜像	docker search [imageName]	
history	查看镜像历史	docker history [imageName]	
inspect	显示一个或多个镜像详细信息	docker inspect [imageName]	
pull	拉取镜像	docker pull [imageName]	
push	推送一个镜像到镜像仓库	docker push [imageName]	
rmi	删除镜像	docker rmi [imageName] docker image rmi 2	
prune	移除未使用的镜像,没有标记或补任何容器引用	docker image prune	docker image prune
tag	标记本地镜像,将其归入某一仓库	docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]	docker tag centos:7 zhangrenyang/centos:v1
export	将容器文件系统作为一个tar归档文件导出到STDOUT	docker export [OPTIONS] CONTAINER	docker export -o hello-world.tar b2712f1067a3
import	导入容器快照文件系统tar归档文件并创建镜像	docker import [OPTIONS] file/URL/- [REPOSITORY[:TAG]]	docker import hello-world.tar
save	将指定镜像保存成tar文件	docker save [OPTIONS] IMAGE [IMAGE...]	docker save -o hello-world.tar hello-world:latest
load	加载tar文件并创建镜像		docker load -i hello-world.tar
build	根据Dockerfile构建镜像	docker build [OPTIONS] PATH / URL / -	docker build -t zf/ubuntu:v1 .
特殊用于批量删除
docker image ls -a -q
- 容器相关
run	从镜像运行一个容器	docker run ubuntu /bin/echo 'hello-world'
ls	列出容器	docker container ls
inspect	显示一个或多个容器详细信息	docker inspect
attach	要attach上去的容器必须正在运行,可以同时连接上同一个container来共享屏幕	docker attach [OPTIONS] CONTAINER	docker attach 6d1a25f95132
stats	显示容器资源使用统计	docker container stats
top	显示一个容器运行的进程	docker container top
update	更新一个或多个容器配置		docker update -m 500m --memory-swap -1 6d1a25f95132
port	列出指定的容器的端口映射	docker run -d -p 8080:80 nginx docker container port containerID
ps	查看当前运行的容器	docker ps -a -l
kill [containerId]	终止容器(发送SIGKILL )	docker kill [containerId]
rm [containerId]	删除容器	docker rm [containerId]
start [containerId]	启动已经生成、已经停止运行的容器文件	docker start [containerId]
stop [containerId]	终止容器运行 (发送 SIGTERM )	docker stop [containerId] docker container stop $(docker container ps -aq)
logs [containerId]	查看 docker 容器的输出	docker logs [containerId]
exec [containerId]	进入一个正在运行的 docker 容器执行命令	docker container exec -it f6a53629488b /bin/bash
cp [containerId]	从正在运行的 Docker 容器里面,将文件拷贝到本机	docker container cp f6a53629488b:/root/root.txt .
commit [containerId]	根据一个现有容器创建一个新的镜像	docker commit -a "zhufeng" -m "mynginx" a404c6c174a2 mynginx:v1
- 运行容器时的参数
	-i --interactive	交互式
	-t --tty	分配一个伪终端
	-d --detach	运行容器到后台
	-a --attach list	附加到运行的容器
	-e --env list	设置环境变量	docker run -d -p 1010:80 -e username="zhufeng" nginx \ docker container exec -it 3695dc5b9c2d /bin/bash
	-p --publish list	发布容器端口到主机
	-P	--publish-all
	
- commit制作个性化镜像,比如我们在centos里装了一个nginx服务
我可以将容器搞成镜像,下次直接run就行了。
docker container commit -m"我的nginx" -a "lirenjie" 3695dc5b9c2d jack/mynginx
docker image ls
docker container run jack/mynginx /bin/bash
- 指定数据卷,让宿主机跟容器共享文件夹。不然我们的log等一些有用的文件还得去容器里找

docker run -it -v /root/test:/usr/share/xixi centos

也可以创建数据卷(默认是/var/lib/docker/volume/xxx)
docker volume create xxxtest
docker volume ls
docker volume inspect xxxtest
docker run -it -mount xxxtest:/usr/share/xixi centos
- 网络,因为docker容器里跑的也是系统,所以就会有网络~类似虚拟机。三种模式bridge(创建容器默认连接到此网络)、 none 、host
使用--net来指定bridge、none 、host

通过启动的时候给容器起名,使用link指定,可以直接ping容器的名字
docker run -d --name mNx nginx
docker run -d --name nginx2 --link mNx nginx

- 创建自定义网络
可以创建多个网络,每个网络IP范围均不相同
docker的自定义网络里面有一个DNS服务,可以通过容器名称访问主机
# 创建自定义网络
docker network create --driver bridge myweb
# 查看自定义网络中的主机
docker network inspect myweb
# 创建容器的时候指定网络
docker run -d --name mynginx1  --net myweb nginx
d

制作个性化镜像,一般我们选择创建Dockerfile来制作个性化镜像

  • demo
mkdir nodeapp
vi .dockerignore里面写入当前目录下不需要打进来的那些文件比如.git之类的
mkdir app
vi Dockerfile 里面写入
                FROM node   拉取啥镜像
                COPY ./app /app  拷贝当前目录到镜像里的根目录
                WORKDIR /app  cd到/app
                RUN npm install 执行装包(到此为止都是在镜像制作的阶段)
                EXPOSE 3000  -暴露容器的300端口
                CMD node server.js(进入到容器后,执行的脚本)
ps:node安装
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
source /root/.bashrc
nvm install stable

容器管理

  • docker-compose