docker是什么?

  1. docker是一个可以创建、管理容器的仓库。docker里面可以存放很多容器
  2. 一个容器就是一个精简版本的linux系统
  3. 容器的创建依赖于镜像,镜像可以看作是一个模板,我们可以采用这个模板直接使用 或者基于这个模板干更多事情
  4. 容器方便移植,如果当前容器有mysql、等系统环境那么我们可以在环境迁移的时候快速进行迁移环境打包迁移。
  1. #下载yum-utils工具包
  2. yum install -y yum-utils
  3. #配置下载地址
  4. yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  5. #查看docker镜像版本
  6. yum list docker-ce --showduplicates |sort -r
  7. #安装docker
  8. yum install docker-ce-18.03.1.ce
  9. #启动docker
  10. systemctl start docker
  11. #docker加入自启动
  12. systemctl enable docker
  13. #查看docker版本
  14. docker version

docker 安装nginx

docker pull  nginx 默认最新版本 如果需要指定版本则nginx:version
#查看镜像
docker images

docker入门指南 - 图1

启动docker镜像

 docker run -d -p 82:80 --name mynginx nginx

运行docker的nginx  -d 后台运行 -p 宿主机的82端口映射 nginx的80端口 --name 自定义容器名称 nginx 运行的镜像名称 容器名称
>>Error response from daemon: driver failed programming external connectivity on endpoint mynginx (43986b3a322d708d63bef2e3f4e215351a8e2edd13bada4b44f123841e24a168):  (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 82 -j DNAT --to-destination 172.17.0.2:80 ! -i docker0: iptables: No chain/target/match by that name.
 (exit status 1)).

原因是 重启了防火墙 所以出现该错误 重启docker容器
systemctl restart docker

>> Error response from daemon: Conflict. The container name "/mynginx" is already in use by container "fe89e6eb7e8e1e67dfc580781c3f62442799e0a51f108f3ecdbfc404c2bc78ab". You have to remove (or rename) that container to be able to reuse that name.
解决方案 删除指定的id
docker rm  fe89e6eb7e8e1e67dfc580781c3f62442799e0a51f108f3ecdbfc404c2bc78ab

进入运行容器

docker exec -it mynginx 
配置nginx文件
vim /etc/nginx/conf.d
修改完成 
exit退出容器 重启容器

docker常用命令

#查看所有镜像
docker images 
#查询镜像 
docker search nginx
#拉取镜像
docker pull nginx 默认拉取的是版本最新的
#启动容器
docker run -d -p port:containerPort --name 自定义容器名称  nginx(容器名称)
#关闭
docker stop containerId (Name)
#重启容器服务
docker restart containerId
#进入容器 (伪终端)
docker exec -it mynginx bash
#kill运行中的容器
docker kill containerId
#删除镜像 
docker rmi containerId(Name也可以)
#强制性删除在运行的
docker rmi -i containerId(Name 也是可以的)
#删除本地全部镜像
docker rmi -f $(docker images -q)
#删除多个镜像
docker rmi -f  containerId_1 containerId_2
#删除容器并且删除挂载点的数据卷
docker rm -v nginx
#查看运行中的docker
docker ps 
#查找之前运行过的容器 (有时候容易忘记之前的容器ID 你有可能会重新创建一个  没有这个必要 直接查找 重启一下就可以了)
docker ps -a 
#查看运行的容器大小
docker ps -s 
#docker 传输宿主机文件到容器
docker cp /usr/local/index.html containerId:/usr/local/
#docker传输容器文件到宿主机
docker cp containerId:/usr/local  /usr/local

docker容器外部挂载

什么是docker容器外部挂载?

把宿主机的文件跟容器当中的文件做映射,比如我在宿主机创建了一个nginx的conf文件,那么我希望容器采用这一份配置文件作为启动配置。

docker run --name mynginx -d -p 80:80 \
-v /nginx/html:/usr/share/nginx/html \
-v /nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf \
-v /nginx/logs:/var/log/nginx \
nginx
-d 守护进程的方式运行
-p 端口映射
-v  宿主机的文件目录:映射的文件地址
nginx  镜像

Docker问题集锦

1.error pulling image configuration: Get https://production.cloudflare.docker.com/registry-v2/docker/
拉取镜像的时候报错
解决方案:
vim /etc/resolv.conf #添加如下
nameserver 8.8.8.8