docker 部署常用容器

1,070 阅读3分钟

1. Mysql

sudo docker run -d --name mysql -v /home/ubuntu/docker/mysql/volume:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 mysql

2. Redis

sudo docker run -d --name redis -p 6379:6379 --restart=always redis --appendonly yes --requirepass "123456"

2. ElasticSearch -- 更好的办法 参考 juejin.cn/post/684490…

## 直接这样是有问题的
sudo docker run -d --name elasticsearch -e "discovery.type=single-node" -v /home/ubuntu/docker/elasticsearch/volume:/usr/share/elasticsearch -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -p 9200:9200 -p 9300:9300 elasticsearch:6.8.6

如果创建容器的时候创建成功,但是没有运行,比如:

ubuntu@ubuntubase:~$ sudo docker ps -a
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                       PORTS                               NAMES
4008e80a2318        elasticsearch:6.8.6   "/usr/local/bin/dock…"   3 minutes ago       Exited (127) 3 minutes ago                                       elasticsearch

docker logs 查看

ubuntu@ubuntubase:~$ sudo docker logs 4008e80a2318
chroot: failed to run command '/usr/share/elasticsearch/bin/elasticsearch': No such file or directory

怀疑是因为设置了数据卷,然而此时的宿主机目录是空的,所以导致容器里/usr/share/elasticsearch目录也被覆盖为空了。 删除-v选项

sudo docker run -it --name elasticsearch -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -p 9200:9200 -p 9300:9300 elasticsearch:6.8.6

现在已经可以创建成功

ubuntu@ubuntubase:~$ sudo docker ps -a
[sudo] password for ubuntu:
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                                            NAMES
56eba21eeea5        elasticsearch:6.8.6   "/usr/local/bin/dock…"   3 minutes ago       Up 3 minutes        0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp   elasticsearch
6933992a4cf4        redis                 "docker-entrypoint.s…"   4 hours ago         Up 2 hours          0.0.0.0:6379->6379/tcp                           redis
f25c597c2feb        mysql                 "docker-entrypoint.s…"   5 hours ago         Up 18 minutes       0.0.0.0:3306->3306/tcp, 33060/tcp                mysql

ubuntu@ubuntubase:~$ curl http://192.168.0.106:9200/
{
  "name" : "YvQvJbh",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "HrMNA9IpQWKJc8z_dMjBcA",
  "version" : {
    "number" : "6.8.6",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "3d9f765",
    "build_date" : "2019-12-13T17:11:52.013738Z",
    "build_snapshot" : false,
    "lucene_version" : "7.7.2",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

把容器中的/usr/share/elasticsearch目录下面内容,拷贝到宿主机的数据卷目录中,下次再启动,就可以同步数据卷了

已经创建的容器,能不能挂载数据卷?

ubuntu@ubuntubase:~$ sudo docker cp 56eba21eeea5:/usr/share/elasticsearch /home/ubuntu/docker/elasticsearch/volume

ubuntu@ubuntubase:~/docker/elasticsearch/volume$ ls -al
total 484
drwxrwxr-x  9 ubuntu ubuntu   4096 Dec 29 22:59 .
drwxrwxr-x  3 ubuntu ubuntu   4096 Dec 29 22:32 ..
drwxr-xr-x  3 root   root     4096 Dec 14 01:16 bin
drwxrwxr-x  2 root   root     4096 Dec 29 22:39 config
drwxrwxr-x  3 root   root     4096 Dec 29 22:39 data
drwxr-xr-x  3 root   root     4096 Dec 14 01:15 lib
-rw-r--r--  1 root   root    13675 Dec 14 01:10 LICENSE.txt
drwxrwxr-x  2 root   root     4096 Dec 29 23:00 logs
drwxr-xr-x 31 root   root     4096 Dec 14 01:15 modules
-rw-r--r--  1 root   root   427502 Dec 14 01:15 NOTICE.txt
drwxr-xr-x  2 root   root     4096 Dec 14 01:15 plugins
-rw-r--r--  1 root   root     8534 Dec 14 01:09 README.textile

4. Kibana -- 更好的办法 参考 juejin.cn/post/684490…

Kibana需要和ElasticSearch相互通信,之前使用的是--link方式,这种已经过时了,现在使用network

## 创建网络
sudo docker network create elasticsearch-kibana

## 创建elasticsearch时加入网络参数
sudo docker run -d --name elasticsearch -e "discovery.type=single-node" -v /home/ubuntu/docker/elasticsearch/volume:/usr/share/elasticsearch -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -p 9200:9200 -p 9300:9300 --network=elasticsearch-kibana elasticsearch:6.8.6

## 创建kibana,最好使用和elasticsearch相同的版本
sudo docker run -it -e ELASTICSEARCH_URL="http://192.168.0.106:9200" --network=elasticsearch-kibana -p 5601:5601 kibana:6.5.1

5. Nginx

1. 先启动一个容器,拿到nginx配置:
docker run -p 80:80 --name nginx -d nginx
2. 复制配置文件
docker container cp nginx:/etc/nginx [destDir]
3. 将这些配置放到数据卷nginx/conf下,然后启动容器
sudo docker run -p 80:80 --name nginx -v /home/chins/docker/nginx/html:/usr/share/nginx/html -v /home/chins/docker/nginx/logs:/var/log/nginx -v /home/chins/docker/nginx/conf/:/etc/nginx -d nginx