##安装kafka服务
$ curl -sSL https://raw.githubusercontent.com/bitnami/containers/main/bitnami/kafka/docker-compose.yml > docker-compose.yml
$ docker-compose up -d
docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -p 3308:3306 -d mysql
docker pull pingcap/tidb
docker run --name tidb -p 4000:4000 -d tidb
docker run --name nginx -p 80:80 -d nginx
docker run --name redis -p 6378:6379 -d redis:6.2 redis-server --save 60 1 --loglevel warning
设置docker开机自启
systemctl enable docker
设置容器自启
- 创建容器时设置:
docker run -d --restart=always --name 容器名称 镜像名称
# 例如:
docker run --restart=always 56f0b18af626
- 更新已有容器设置:
docker update --restart=always 容器ID
# 例如:
docker update --restart=always 56f0b18af626
–restart具体参数,详见官方文档说明
问题描述 docker使用时,通过默认镜像地址检索或者拉取镜像时,仓库下载速度较慢,时常报错“net/http: TLS handshake timeout”。 解决问题的核心策略是,将拉取地址改为国内镜像仓库即可。
方法一
修改/etc/docker/daemon.json,多加几个可靠的地址,如下:
{
“registry-mirrors”: [“https://registry.docker-cn.com”,“http://hub-mirror.c.163.com”,“http://f1361db2.m.daocloud.io”,“https://mirror.ccs.tencentyun.com”]
}
会查看命令帮助 --help
>docker start --help
>docker run --help
>docker container run --help
查看镜像
docker images
查看容器
docker ps -a
docker container ls -a
进入到容器
docker container exec -it containerID /bin/bash
docker version
启动容器
docker run -d -p 80:8080 nginx
-d 后台运行,不加前台运行 -p 端口映射 内:外
docker run 与docker start的区别
docker run 只在第一次运行时使用,将镜像放到容器中,以后再次启动这个容器时,只需要使用命令docker start
即可。
docker run相当于执行了两步操作:将镜像放入容器中(docker create),然后将容器启动,使之变成运行时容器(docker start)。
而dockerstart的作用是,重新启动已存在的镜像。
也就是说,如果使用这个命令,我们必须事先知道这个容器的ID,或者这个容器的名字,我们可以使用docker ps找到这个容器的信息。
删除镜像
docker rmi imagesID
删除容器
docker rm ContainerID
拉取镜像
docker image publl library/nginx
发布image文件
$ docker login
1接着,为本地的 image 标注用户名和版本。
$ docker image tag [imageName] [username]/[repository]:[tag]
# 实例
$ docker image tag koa-demos:0.0.1 ruanyf/koa-demos:0.0.1
也可以不标注用户名,重新构建一下 image 文件。
$ docker image build -t [username]/[repository]:[tag] .
最后,发布 image 文件。
$ docker image push [username]/[repository]:[tag]
发布成功以后,登录 hub.docker.com,就可以看到已经发布的 image 文件。
上面的代码中,docker image pull 是抓取image文件的命令,library/hello-world是image文件在仓库里面的位置,其中library是image文件所在的组,hello-world是image文件的名字.
由于Docker官方提供的文件都放在library组里面,所以他是默认组,可以省略.因此上面的命令可以写成下面这样:
docker image publl nginx
docker container run 会从一个镜像文件中生成一个容器实例,并且运行它.注意,docker container run命令具有自动抓取 image 文件的功能。
如果发现本地没有指定的 image 文件,就会从仓库自动抓取。因此,前面的docker image pull命令并不是必需的步骤
终止容器
docker container kill [container_id]
docker container run 和 docker run 命令相同。 前者是趋势。
Dockerfile 文件
DockerCompose
docker-machine
有了 Dockerfile文件以后就可以使用 docker image build 命令创建image文件了.
查看帮助
docker image --help
docker image bulid -t nginx_xwsh:0.0.1 .
-t参数用来指定image文件的名字,后面还可以用冒号指定标签,如果不指定,默认标签就是latest,
最后那个.表示Dockerfile文件所在的路径.
docker container logs [container_id]
docker container logs用来查看容器的输出,即容器里shell的标准输出.
比如: 如果docker run命令运行容器的时候,没有使用-it参数,就要使用这个命令查看输出
docker container exec
docker container exec命令用于进行一个正在运行的容器.
如果docker container run命令运行容器的时候,没有使用-it参数,就要使用这个命令进入进入容器,一旦进入容器,
就可以在容器的shell执行命令了.
$ docker container exec [container_id] /bin/bash
docker container cp
docker container cp命令用于从正在运行的容器里,将文件拷贝到本机.下面是拷贝当前 目录的写法:
$ docker container cp [container_id]:[/path/to/file] .
踩坑记录:
windows10中docker nginx开启 但页面访问不了
Windows下对docker端口进行映射,但是当你在主机的浏览器中,打开localhost:port无法访问对应的服务。
docker是运行在Linux上的,在Windows中运行docker,实际上还是在Windows下先安装了一个Linux环境,
然后在这个系统中运行的docker。也就是说,服务中使用的localhost指的是这个Linux环境的地址,而不是我们的宿主环境Windows。
使用命令:
docker-machine ip default
得到真正的ip是192.168.99.100
其实在启动docker的时候也告诉我们默认ip为192.168.99.100
排查错误:
1.docker inspect 40f529c61fb12
2. docker exec -it 314fb4575ecf /bin/bash
3. docker exec 314fb4575ecf hostname
镜像加速
在国内使用Docker Hub的话就特别慢,为此,我们可以给Docker配置国内的加速地址。我看了一下,DaoCloud和阿里云的镜像加速还不错,另外还有网易的蜂巢。选一个就行了。以DaoClound为例,注册账号,然后在https://www.daocloud.io/mirror 就可以看到DaoClound提供给您的镜像加速的URL。然后到PowerShell中去依次执行:
docker-machine ssh default
sudo sed -i "s|EXTRA_ARGS='|EXTRA_ARGS='--registry-mirror=加速地址 |g" /var/lib/boot2docker/profile
exit
docker-machine restart default
这样重启Docker后就可以用国内的镜像来加速下载了。
试一下下载一个mysql看看快不快:
docker pull mysql
下载完镜像,我们运行一个容器:
docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123 mysql:latest
接下来我们打开windows下的mysql客户端,服务器地址填docker虚拟机的IP地址,通过docker-machine env可以看到,我这里是192.168.99.100,然后用户名root,密码123,这样我们就可以连接到docker容器里面的mysql了。
【注意,Docker容器是在VirtualBox的虚拟机里面,不是在Windows里面,所以不能用127.0.0.1访问】
docker-machine命令
参考资料
docker-machine ls
我们可以看到我们当前的Docker虚拟机的状态。如果什么都没有的话,那么我们可以使用以下命令创建一个Docker虚拟机。
docker-machine create --driver=virtualbox default
docker-machine stop default停掉Docker的虚拟机
文件挂载
docker run -v /www:/usr/share/nginx/html -d -p 8081:80 --name xwsh_55 nginx
1.首先在Oracle VM VirtualBox设置共享文件夹
2.我双击Docker Quickstart Terminal进入命令行界面,输入docker-machine restart default
3.然后输入docker-machine ssh default,进入虚拟机内部
4.然后我mount一下,发现data已被自动挂载到虚拟机里面一个叫www的目录了,所以在Oracle VM VirtualBox设置的名字和default虚拟机中的文件夹名字是一致的
5. docker run -v /www:/usr/share/nginx/html -d -p 8081:80 --name xwsh_55 nginx
进入centos的容器里面之后输入df -h发现已经挂载成功了。之前搞不定的主要原因就是虚拟机虚拟了太多层了
docker-machine.exe ssh default
sudo -i
mkdir www
sudo mount -t vboxsf WWW /mnt/www
cd www/
Docker LNMP环境搭建
参考资料
资料推荐: